62,614
社区成员
发帖
与我相关
我的任务
分享
// object initialization block
{
id = nextId;
nextId++;
}
public Employee(double s)
{
// calls the Employee(String, double) constructor
this("Employee #" + nextId, s);
}
理解这个问题的关键在于运行的顺序和时机
public Employee(double s)运行时,并没有立即运行对象初始化块
而是先运行 this("Employee #" + nextId, s); 直到这个时候,才引起对象初始化块的执行
因此此时的"Employee #" + nextId中的nextID记录的是未增1前的值
因为String是不可变类,传入的"Employee #" + nextId是字符串,其中的nextId一旦确定不再改变
所以这里用nextId,在构造对象前,传入下个对象应该生成的ID,来说明将要生成对象的真正属性
我只想说,技巧性太强了,我是写不出的....