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类。