这里是代码为什么子类中的静态块没有被执行?
public class ClassResolution {
static class Parent {
public static String name;
static {
System.out.println("this is Parent");
name = "Parent";
}
}
static class Child extends Parent {
static {
System.out.println("this is Child");
name = "Child";
}
}
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(Child.name);
}}
什么输出中我想到的是:
this is Parent
this is Child
Child
但实际上是:
this is Parent
Parent
似乎在儿童类的静态块没有得到执行,但为什么?这是反直觉,不是吗?
补充:
,使之更加明确,我列出 分以下:
- 作为@axtavt说,根据JLS 12.4.1,儿童类加载,但不初始化。
但是@Alexei Kaigorodov指出,根据jvms-5.5, 类子应该初始化,因为执行 指令getstatic对Child类。
你觉得呢?
supplement2:
@Alexei Kaigorodov已经更新了主意,因此它似乎并无意见分歧离开了。但我认为阿列克谢凯戈罗多夫的观点是有启发性的,所以我把它留在那里。
谢谢大家。
我编辑我的答案,类的初始化孩子不是必需的(虽然可能会发生)。 –