我有2个类:
类A:
public class A {
static B b = new B();
static {
System.out.println("A static block");
}
public A() {
System.out.println("A constructor");
}
}
类 B:
public class B {
static {
System.out.println("B static block");
new A();
}
public B() {
System.out.println("B constructor");
}
}
我创建了一个主类,只是创建了一个新的 A:
public class Main {
public static void main(String[] args) {
new A();
}
}
我得到的输出是:
B static block
A constructor
B constructor
A static block
A constructor
如您所见,A的构造函数在其静态初始化程序之前被调用。
我知道这与我创建的循环依赖有关,但我以为静态初始化程序应该始终在构造函数之前运行。
这种情况发生的原因是什么(在Java实现中的技术原因)?
是否建议完全避免使用静态初始化程序?