Java基础 の 对象与类

面向对象设计概述

  • 面向对象的程序设计方式,是遇到一件事时,思考“我该让谁来做”,然后那个“谁”就是对象,他要怎么做这件事是他自己的事,反正最后一群对象合力能把事做好就行了。例如,公司打扫卫生(擦玻璃、扫地、拖地、倒垃圾等),按照面向对象的程序设计方式会思考“我该让谁来做,如小明擦玻璃、让小丽扫地、让小郭拖地、让小强倒垃圾等”,这里的“小明、小丽、小郭、小强” 就是对象,他们要打扫卫生,怎么打扫是他们自己的事,反正最后一群对象合力把公司卫生打扫干净了。
万物皆是对象
  • 对象在需求中的使用
    案例分析:
    把大象装进冰箱里

在针对具体的需求,可以使用名词提炼的办法进行分析,寻找具体的对象。
需求:把大象装进冰箱
对象:大象、冰箱
分三步:
1、打开冰箱门
2、把大象装进去
1、关闭冰箱门
分析发现打开、装、关闭都是冰箱的功能。即冰箱对象具备如下功能:
冰箱打开
冰箱储存
冰箱关闭
用伪代码描述,上述需求中有两个具体的事物 大象 和 冰箱

//描述大象lass 大象{

}
//描述冰箱
class 冰箱{
        void 打开(){}
        void储存(大象){}
        void关闭(){}
}

当把具体的事物描述清楚之后,需要使用这些具体的事物,Java使用具体的事物,需要通过new关键字来创建这个事物的具体实例。

//使用对象:
//  1.创建冰箱的对象
    冰箱 bx = new 冰箱();
//2.调用冰箱的功能
      对象.功能();
      bx.打开();
      bx储存(new大象());
      bx.关闭;
  • 总结:
    1、先按照名词提炼问题领域中的对象
    2、对对象进行描述,其实就是在明确对象中应该具备的属性和功能
    3、通过new的方法就可以创建该事物的具体对象
    4、通过该对象用它以后的功能。

使用现有类

定义的类可以在一个包下面,也可以不在一个包下面,这在使用时是不同的。类又分为已有类和自定义类,它们之间的使用也是有区别的。

同一目录下:
 //bike.java
   class bike{

    }

接下来定义一个使用bike类的类。

  //testBike.java
 //在testBike类里使用了bike类
   class testBike{
       bike b = new bike();
 }
不同目录下:
 //bike.java
   class bike{

    }

接下来定义一个使用bike类的类。

    //testBike.java
   
   //引入a目录下的bike类
    import a. bike;
   //在testBike类里使用了bike类
    class testBike{
        bike b = new bike();
   }

使用系统自带的类。

  // test类
    public class test{
        public static void main(String[] args)
        {
          //String类为Java自带的类,描述的是一个字符串
           String s = new String();
         }
   }

用户自定义类

1.公有类:
在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类

2.构造器:
构造器与类同名

每个类可以有一个以上的构造器

构造器可以有0个、1个或多个参数

构造器没有返回值

构造器总是伴随着new操作一起调用

3.隐式参数与显式参数:
隐式参数称为方法调用的目标或接受者

显示参数一般是形参

在每个方法中,关键字this表示隐式参数

4.内联函数:
Java中,所有的方法都必须在类的内部定义,但是并不表示它们是内联函数,这由Java虚拟机的任务

5.访问器:
注意不要编写返回引用可变对象的访问器方法

如果需要返回一个可变对象的引用,应该首先对它进行克隆(clone)

6.基于类的访问权限:
方法可以访问所属类的私有特性,而不权限于访问隐式参数的私有特性,例如:

class Employee{

  
      ...
        public boolean equals(Employee other)

        {

            return name.equals(other.name);

        }

    }

7.final实例域:
当实例域定义为final时,构建对象时必须初始化这样的域

静态域与静态方法

1、静态域
  • 如果将域定义为static,每个类只有一个这样的域。而每一个对象对于所有的实例域都有自己的一份拷贝。例如,假定需要给每一个雇员赋予唯一标识码。给Employee类添加一个实例域id和静态域nextId。
class Employee{

private static int nextId = 1;

private int id;

}

现在,每一个雇员对象都有一个自己的id域,但是这个类所有的实例共享一个neatid域。换句话说,1000个类的对象,有10000个实例域id,但是只有一个静态域nextId。即使没有一个雇员对象,静态域neatid也存在。属于这个类,不属于任何独立对象。

2、静态方法

静态方法是一种不能向对象实施操作的方法。
可以认为静态方法是没有this参数的方法(在一个非静态的方法中,this参数表示这个方法的隐式参数)。
因为静态方法不能操作对象,所以不能在静态方法中访问实例域。但是,静态方法可以访问自身中的静态域。

main方法:
public class demo_01{
        public static void main(String[] args){

}
}

需要注意,不要使用对象调用静态方法。例如不需要构造Math类对象就可以调用Math.pow。

方法参数

按值调用 ( call by value ) 表示方法接收的是调用者提供的值。 而按引用调用( call by reference )表示方法接收的是调用者提供的变量地址。 一个方法可以修改传递引用所对应的变量值 , 而不能修改传递值调用所对应的变量值。Java 程序设计语言总是采用按值调用。
1、方法参数为基本数据类型

public static strictfp void main(String[] args) {
        int x = 1;
        int y = 2;
        swap(x, y);
        System.out.println("x:"+x+",y:"+y);
    }
    
    public static void swap(int a,int b){
        int temp = a;
        a = b;
        b = temp;
    }

执行如上代码:swap方法并未改变x,y的值,执行完swap方法后,swap弹栈,变量temp,a,b随之消失。
2、方法参数为对象引用

    public static strictfp void main(String[] args) {
        Person x = new Person("张三");
        change(x);
        System.out.println("x:"+x.name);
    }
    
    private static void change(Person a) {
        a.name = "李四";
        
    }

a为x值的一个拷贝,这里是一个对象引用,a和x同时指向一个Person对象。
3、证明java是按值调用

public static strictfp void main(String[] args) {
        Person x = new Person("张三");
        Person y = new Person("李四");
        swap(x, y);
        System.out.println("x:"+x.name+",y:"+y.name);
    }
    
    public static void swap(Person a,Person b){
        Person temp = a;
        a = b;
        b = temp;
    }

包主要用来对类和接口进行分类。当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。
mport语句
在Java中,如果给出一个完整的限定名,包括包名、类名,那么Java编译器就可以很容易地定位到源代码或者类。import语句就是用来提供一个合理的路径,使得编译器可以找到某个类。
例如,右面的命令行将会命令编译器载入java_installation/java/io路径下的所有类,import java.io.;
一个简单的例子
在该例子中,我们创建两个类:Employee和EmployeeTest。
首先打开文本编辑器,把下面的代码粘贴进去。注意将文件保存为Employee.java。
Employee类有四个成员变量:name、age、designation和salary。该类显式声明了一个构造方法,该方法只有一个参数。

import java.io.;
public class Employee{
String name;
int age;
String designation;
double salary;
// Employee 类的构造器
public Employee(String name){
this.name = name;
}
// 设置age的值
public void empAge(int empAge){
age = empAge;
}
/* 设置designation的值*/
public void empDesignation(String empDesig){
designation = empDesig;
}
/* 设置salary的值*/
public void empSalary(double empSalary){
salary = empSalary;
}
/* 打印信息 /
public void printEmployee(){
System.out.println(“Name:”+ name );
System.out.println(“Age:” + age );
System.out.println(“Designation:” + designation );
System.out.println(“Salary:” + salary);
}
}


类路径

1.类路径中可以指定三种位置:文件夹、jar文件、zip文件;

2.-cp或者-classpath可以指定多个位置,在windows上是用分号隔开,在linux上是用冒号隔开。例如在linux上:-cp dir1:dir2:dir3,此处指定了3个目录作为类查找路径。

3.如果没有明确的指定类路径,则默认是当前工作路径,注意当前工作路径是一个文件夹,因此如果当前工作路径下面有个jar文件,jar文件中的类是不会被找到的。记住文件夹与jar各是各。

4.如果通过-cp或者-classpath选项指定了类路径,则当前工作路径就不会再包含进类路径中了。此时如果仍然需要将当前工作路径纳入类路径,需要通过点号再加回来。例如:-cp .:dir1,此处表示在linux上当前工作目录和dir1目录都是类路径;

5.指定jar文件的示例:-cp main.jar。指定zip文件也可以,此处不再演示。

6.关于通配符的使用:

a.通配符只是用来匹配jar的,不能用来匹配类文件或者目录。

b.通配符不递归匹配;

c.如果目录dir下面有6个jar都要作为类路径,传统的可以写成:-cp test1.jar:test2.jar:test3.jar:test4.jar:test5.jar:test6.jar,有没有发现很麻烦,其实用通配符写起来简单多了:-cp ,此时如果当前目录也要作为类路径,可写成:-cp .:,冒号是linux上的路径分隔符;

d.有没有发现,通配符只是减少了在指定类路径时罗列jar麻烦。

7.还可以通过CLASSPATH环境变量指定类路径,但是不到万不得已,不要这样用。显然的,如果配置到环境变量中去了,则系统中所有的java程序都会相互影响,那就不妙了。

文档注释

格式:

/** 
注释内容 
*/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • [Java核心技术1] 第4章 对象和类 面向对象程序设计(OOP)与面向过程的程序设计在思维方式上有很大的差别...
    椎椎隹木阅读 560评论 0 0
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,785评论 0 10
  • 4对象与类 面向对象程序设计 如何创建标准java类库中的类对象 如何编写自己的类 4.1概述 程序由对象构成,每...
    我快要上天啦阅读 480评论 0 0
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,537评论 0 6
  • 文|烽火长歌 姑且把这篇也当作一篇读书笔记吧,毕竟也是读完书且查阅了一番。吹的牛皮要一个个吸回来啊,不易!第二篇了...
    烽火长歌阅读 871评论 8 21