public
static
Random rand =
new
Randdom(47);
public
static
void main(String[] args){
Class initable = Initable.
class
;
//不会引起初始化
System.out.println("after creating Initable reference");
System.out.println(Initable.staticFinal);
//引用编译器常量不会引起初始化
System.out.println(Initable.staticFinal2);
//引起初始化
System.out.println(Initable2.staticNoFinal);
//引用非编译期常量会引起初始化
Class initable3 = Class.forName("Initable3");
//默认会引起初始化
System.out.println("after creating Initable3 reference");
System.out.println(Initable3.staticNoFinal);
//前面已经初始化此处不用再初始化
}
}
输出结果:
after creating Initable reference
47
Initialization Initable
258
Initialization Initable2
147
Initialization Initable3
after creating Initable3 reference
74
如果一个
static
final
值是编译期常量,那么对该值的引用无需对其所在类进行初始化;若
仅仅是
static
和
final
但不是编译期常量,则会引发初始化其类。若是引用一个
static
值则要
进行链接并对其所在类进行初始化。