4 对象与类
4.1 面向对象程序设计概述
1 类
封装(数据隐藏):将数据和行为组合在一个包中,并对对象使用者隐藏数据的实现方式。
对象中的数据成为实例域,操纵数据的过程称为方法。
2 对象
对象的三个主要特性:对象的行为behavior,对象的状态state,对象标识identity。
3 识别类
4 类之间的关系
依赖uses-a,一个类的方法操纵另一个类的对象
聚合has-a,一个类的对象(其数据域)包含另一个类的对象
继承is-a,类A扩展类B。
4.2 使用预定义类
1 对象与对象变量
2 java类库中的GregorianCalendar类
3 更改器方法与访问器方法
4.3 用户自定义类
1 Employee类
构造对象数组:Employee[] staff = new Employee[3];
遍历: for(Employee e : staff)
在一个java文件中,只能有一个public类,可以有任意数目的非公有类。文件名必须和public类的名字相同。
2 多个源文件的使用
编译时:当java编译器发现EmployeeTest.java使用Employee类时,先查找是否有Employee.class文件,如果没有,就搜索Employee.java文件,对其编译。
3 剖析Employee类
4 从构造器开始
构造器总是伴随new操作符的执行被调用,不能用 对象.构造器方法() 这种形式调用(会编译错误)。
5 隐式参数与显式参数
number007.raiseSalary(5):number007是隐式参数,5是显式参数。
在raiseSalary方法中,用this表示隐式参数
6 封装的优点
注意不要编写返回引用可变对象的访问器(get)方法。这样返回的是一个对象的引用,有可能对该对象造成影响。
可以用clone返回一个可变对象的拷贝。
7 基于类的访问权限
8 私有方法
9 final 实例域
定义为final的域,必须在构造对象(构造器执行后)的时候被初始化。之后不能对其进行修改。
4.4 静态域与静态方法
1 静态域
static域,每个类只有一个这样的域。
2 静态常量
static final
3 静态方法
不能向对象实施操作。不能在静态方法中访问实例域,只能访问静态域。
使用类名而不是对象来调用静态方法。
4 工厂方法
5 main方法
4.5 方法参数
4.6 对象构造
1 重载
多个方法有相同的名字,不同的参数,便产生了重载。(只针对方法名和参数)
方法的签名:方法名及参数
2 默认域初始化
数值为0,布尔值为false,对象引用为null。
3 无参数的构造器
如果一个类没有编写构造器,系统会提供一个无参数构造器。
如果一个类中提供了有参数的构造器,但没有提供无参数的构造器,则在构造对象时如果没有提供参数就会被视为不合法。
4 显式域初始化
系统会先调用域赋值语句,再调用构造器。
5 参数名
6 调用另一个构造器
public Employee(double s){
this(...);
}
用this()调用同一个类的另一个构造器。
7 初始化块
一个类声明中可以包含多个代码块,只要构造类的对象,这些代码块就会被执行。
先运行初始化块,然后运行构造器。
将初始化块放在域定义之后。
具体步骤:所有数据被初始化为默认值->按照在类声明中的出现的次序,依次执行域初始化语句和初始化块->执行构造器
对静态域的初始化方法:域声明中赋值,静态初始化块 static {...}
8 对象析构与finalize方法
finalize方法在垃圾回收器清除对象前调用
4.7 包
1 类的导入
2 静态导入
3 将类放入包中
4 包作用域
4.8 类路径
4.9 文档注释
以/**开始,以*/结束。