public class StaticFinal {
public static final int A = 8;
public static final Object O = new Object();
static {
System.out.println("如果执行了,证明类初始化了");
}
}
class MyTest {
public static void main(String[] args) {
System.out.println(StaticFinal.A);
}
}
执行上面的代码,会只打印出8,证明StaticFinal类没有被初始化(类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段)。
将
System.out.println(StaticFinal.A);修改为
System.out.println(StaticFinal.O);会打印出:
如果执行了,证明类初始化了
java.lang.Object@102799c
证明StaticFinal类被初始化了
如果变量A只是静态的而不是常量,那么在MyTest中打印出A时,也会初始化StaticFinal类。