1. 不要编写返回引用可变对象的访问器方法,会破坏封装性,会改变改对象的私有状态
如需要返回一个可变数据域的拷贝,就应该使用clone 书P113
class Employee {
privateDate hireDay;
…
publicDate getHireDay() {
returnhireDay; //return hireDay.clone();
}
}
2. Date与Calendar
public class Main {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
// 使用pattern
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd H:m:s");
System.out.println(format.format(c.getTime()));
// 使用约定格式
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.MEDIUM);
System.out.println(dateFormat.format(c.getTime()));
}
}
3. Java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是对象引用的拷贝 call-by-value[-of-the-reference]
的传递。P123
public static void swap(Employeex, Employee y ) //doesn’t work
{
Employeetemp = x;
x= y;
y= temp;
}
下面总结一下Java程序设计语言中方法参数的使用情况:
- 一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)。
- 一个方法可以改变一个对象参数的状态。
- 一个方法不能让对象参数引用一个新的对象。
4. 调用另一个构造器
如果构造器的第一个语句形如this(…),这个构造器将调用同一个类的另一个构造器。P133
public Employee(double s)
{
//callsEmployee(String ,double)
this(“Employee#” + nextId, s);
nextId++;
}
当调用newEmployee(60000)时,Employee(double) 构造器将调用Employee (String, double)构造器。
采用这种方式使用this关键字非常有用,这样对公共的构造器代码部分只编写一次即可。
5. 静态初始化块是对类而言,非静态初始化块是对对象而言。this()和super()都指的是对象,所以,均不可以在static环境中使用