代码见《Java核心技术卷1》–4.6对象构造
关于初始化块的内容链接: 面向对象–初始化块.
public class ConstructorTest {
public static void main(String args[]) {
Employee[] staff = new Employee[3];
staff[0] = new Employee("Harry",40000);
staff[1] = new Employee(60000);
staff[2] = new Employee();
for(Employee e: staff) {
System.out.println("name = "+ e.getName()+",id = "+ e.getId()+",salary = "+ e.getSalary());
}
}
}
import java.util.Random;
public class Employee {
private static int nextId;//因为它要在静态构造块中使用,所以必须为static变量
private int id;
private String name = "";
private double salary;
static//这是一个静态初始化块,在类第一次加载时执行,且只执行一次
{
Random generator = new Random();//随机数方法
nextId = generator.nextInt(10000);//给nextId一个0~9999的随机整数
}
//执行完静态构造块后,nextId的值就确定了,这也就解释了为什么员工的id数字是连续的
{//这是一个实例初始化块
id = nextId;
nextId++;
}
public Employee(String n,double s) {
name = n;
salary = s;
}
public Employee(double s) {
this("Employee #"+nextId,s);//调用另一个构造器,从这一行开始,执行所调用的构造器的代码
}
public Employee() {//这是一个无参构造器
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public int getId() {
return id;
}
}