了解加载类和调用静态初始化程序
因此,我试图确认一下 -
public class OOMErrorB extends OOMErrorA {
public static int c = 10;
static {
System.out.println("Loading static B " + c);
System.out.println(OOMErrorA.a);
}
public static void main(String[] args) {
new OOMErrorB();
}
}
父类是 -
public class OOMErrorA {
public static int a = 20;
static {
a = a+ OOMErrorB.c;
System.out.println("OOMErrorB.c " + OOMErrorB.c);
System.out.println("loading OOMErrorA.a " + a);
}
}
现在是B类的主方法输出 -
OOMErrorB.c 0
loading OOMErrorA.a 20
Loading static B 10
20
我可以理解,首先加载A类,因为它是超类,并调用其静态初始化程序,
现在,由于在OOMErrorA的静态块中访问OOMErrorB.c,因此它应该加载并调用OOMErrorB的静态初始化程序。 因此,OOMErrorB.c应该是10而不是0。
我对类的加载和初始化的了解-
1) Class and gets loaded and variables are initialized to default values like for int - 0, Object - null.
2) Class field are initialized to specified values.
3) Static block gets called .
在我的程序中,我可以看到 OOMErrorB 类被加载了(步骤1),但步骤2和步骤3没有执行。
而根据链接中被接受的答案,它应该调用 OOMErrorB 的静态初始化程序。
所以它应该最终陷入循环依赖关系?
main
方法之前就已经加载了它。 - M A