У меня есть 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)?
Рекомендуется ли избегать статических инициализаторов вместе?