我有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");
}
}
我创建了刚刚创造了新的一个主类:
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实现)的原因是什么?
它是建议,以避免静态初始化所有在一起吗?