4.3.1 Employee类
在Java中,最简单的类定义形式为:
class ClassName {
field1
field2
. . .
constructor1
constryctor2
. . .
method1
method2
. . .
}
注意文件名必须与public类的名字相匹配。在一个源文件中只能有一个公有类,
4.3.2 多个源文件的使用
习惯将每一个类存放在单独的源文件中
4.3.3 剖析Employee类
public意味着任何类的任何方法都可以调用这些方法。
private确保只有Employee类的自身方法能够访问这些实例域
private String name;
private double salary;
private Date hireDay;
注意 name域是String类对象,hireDay域是Date类的对象
类通常包括类型属于某个类 类型的实例域。
4.3.4 从构造器开始
构造器与类同名。
每个类可以有1个以上的构造器
构造器可以有0个、1个或多个参数
构造器没有返回值
构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。java所有的对象都是在堆中构造的。
不要在构造器中定义与实例域重名的局部变量
4.3.5 隐式参数与显式参数
方法用于操作对象以及村粗他们的实例域
例如
public void raiseSalary(double byPercent) {
double raise = salary * byPercent / 100;
salary += raise;
}
调用这个对象
number007.raiseSalary(5);
number007 隐式(implicit)参数 出现在方法名前的Employee类对象
raiseSalary 方法名
5 显式参数
在每一个方法中this 表示隐式参数 如果需要的话上述程序可以这样写
public void raiseSalary(double byPercent) {
double raise = this.salary * byPercent / 100;
this.salary += raise;
}
4.3.6 封装的优点
public String getName() {
return name;
}
这是典型的访问器方法,由于他们只返回实例域值,因此又称为域访问器。
name是一个只读域,一旦在构造器中设置完毕就没有任何一个方法能对他进行修改,保证Name域不受到外界的破坏。
有些时候需要获得或设置实例域的值。因此应该提供一下三项内容
一个私有的数据域
一个共有的域访问器方法
一个共有的域更改器方法
不要编写返回 引用可变对象的访问器方法!
如果需要返回一个可变对象的引用,应该首先对它进行克隆(clone)。对象clone是指存放在另一个位置的对象副本,下面是修改后的代码
class Employee {
...
public Data getHireday() {
return hireDay.clone();
}
...
}
4.3.7 基于类的访问权限
对象可以访问所调用对象的私有数据,一个方法可以访问所属类的所有对象的私有数据。
4.3.9 final实例域
可以将实例域定义为final 构建对象时必须初始化这样的域,后面的操作中不能在对她进行修改 比如可以将Employee类中的name域申明为final,之后这个值不会再被修改,即没有setName方法