关于java static 初始化的问题
有如下代码:
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
,有具体的参考资料吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
四个类只有StaticTest加载了,Demo,Ok,OJBK都没有加载,所以什么都没做