我有2類:靜態初始化器在構造函數之後運行,爲什麼?
類A:B
public class A {
static B b = new B();
static {
System.out.println("A static block");
}
public A() {
System.out.println("A constructor");
}
}
類別:
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實現中)?
建議避免使用靜態初始化器嗎?
誰低估了請留下評論 –
好問題其實+1 .. :) – PermGenError
@AviramSegal有些人習慣性地低估了..他們從來沒有讀過整個問題,通過閱讀標題,他們低估了這個問題。 – Ravi