据我所知,JVM在为A的clinit加载和生成代码时,如果遇到一个未解析的类B,编译器会首先向JVM内部发出一个方法调用来初始化B,然后正常编译B的方法调用/字段使用。所以在运行时,确保 B 在其字段或方法被使用之前被初始化。
如果我在上面犯了任何错误,请纠正我。
然后我不明白JVM如何处理像下面这样的情况。
public class A {
public static A a = new A(B.b);
public A(B b) {
a = null;
}
public static void main(String[] args) {
System.out.println(a == null);
}
}
public class B {
public static B b = new B(A.a);
public B(A a) {}
}
有人可以解释这两个类是如何初始化的,因为它们都需要先初始化另一部分吗?为什么A中的main方法返回false,因为静态字段a应该在A的构造函数中设置为null?