私は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 を作成するだけの Main クラスを作成します。
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 実装で) ?
静的初期化子をまとめて避けることをお勧めしますか?