【发布时间】:2023-04-09 23:18:01
【问题描述】:
我正在做一些关于 JAVA 初始化过程的研究。 这是一个很好的参考材料: When a class is loaded and initialized in JVM
在这个页面上有规则说: 3) 如果由于访问静态字段而触发类初始化,则仅初始化已声明静态字段的类,即使子类的类型引用静态字段也不会触发超类或子类的初始化, 子接口或按接口的实现类。
我真的不明白这个想法。如果静态字段被子类引用,那么这个字段当然需要创建一个子类对象或者由一个子类对象赋值。 所以,它肯定会触发子类初始化。
我的解释有什么问题?
编辑:
- 它会触发超类静态初始化。
- 如果静态字段是final,并且静态final字段在声明时被初始化。然后它既不会加载类也不会初始化类,因为这个静态最终字段是一个编译时常量值。 注意:如果 static final 字段在静态块中初始化,则此语句不再成立。
【问题讨论】:
-
当您访问一个静态字段时,与之关联的类会被初始化。 JVM 不会寻找其他哪些类引用这个类并实例化。
标签: java static initialization