有如下代码:
public class StaticTest {
public static void main(String[] args) {
// Class<?> demoClass = Demo.class;
String s = Demo.demo;
// Ok o = Demo.o;
}
private static class Ojbk {
static {
System.out.println("ojbk static");
}
}
private static class Ok {
static {
System.out.println("ok static");
}
}
private static class Demo{
static {
System.out.println("demo static");
}
private final static String demo = "123";
private final static Ok o = new Ok();
private final static Ojbk ojbk = new Ojbk();
}
}
对于运行结果有点疑惑:
当在main
方法中只调用Demo.demo
的时候,ok
和 ojbk
都不会初始化,这很好理解,Demo.demo
在准备阶段就已经和Demo.class无关了,所以不会触发Demo
的初始化。
从运行结果来看,o
,ojbk
是在Demo
初始化的时候才完成自身的初始化的,那么在准备阶段,o
,ojbk
做了什么?如果是static
,那么是赋值为null
,final static
是否也是赋值为null
,有具体的参考资料吗?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…