类初始化器和实例初始化器
一、类初始化器(静态初始化器)
我们来回忆一下上一篇创建的类Id,每创建一个类的实例,都会为其赋上连续的标识编号1、2、3······
这里对该类进行修改,使得标识编号的开始编号并不是1, 而是一个随机数值, 程序如下:
// 标识编号类(通过随机数来设定开始编号)
import java.util.Random;
class RandId {
private static int counter; // 赋到了哪一个标识编号
private int id; // 标识编号
static {
Random rand = new Random();
counter = rand.nextInt(10) * 100;
}
//-- 构造函数 --//
public RandId() {
id = ++counter; // 标识编号
}
//--- 获取标识编号 ---//
public int getId() {
return id;
}
}
public class RandIdTester {
public static void main(String[] args) {
RandId a = new RandId();
RandId b = new RandId();
RandId c = new RandId();
System.out.println("a的标识编号:" + a.getId());
System.out.println("b的标识编号:" + b.getId());
System.out.println("c的标识编号:" + c.getId());
}
}
输出:
代码中的如下部分称为类初始化器或静态初始化器,类初始化器也被称为静态程序块或static程序块;
static {
Random rand = new Random();
counter = rand.nextInt(10) * 100;
}
具语法结构图如图:
正如其名,类初始化器是在类被初始化时执行的,所谓“类被初始化” 是指下述时间点: