我覺得你的問題有兩個部分:
1)爲什麼靜態變量b的值沒有初始化,雖然 該值是在構造函數中初始化的嗎?
答:首先,在main()之前不調用構造函數。構造函數在main()中調用。每當在main()使用new
爲:
public static void main(String args[]){
MyClass myclass= new MyClass()
}
則僅構造函數被調用。
在您的代碼中,靜態變量b未初始化,因爲您正在構造函數A()中初始化它,但此構造函數從未被調用過。你可以調用A()構造函數代碼爲:
public static void main(String[] args) {
A a=new A(); // constructor gets called here.
b.func();
}
2)什麼是初始化靜態變量的正確方法?
初始化靜態變量的正確方法是使用靜態初始化塊,而不是在構造函數中初始化它們,如duffymo給出的答案中所示。
static {
b = new B();
}
您還可以使用:
public class A {
private static B b = new B();
public A() {
}
public static void main(String[] args) {
b.func();
}
}
因爲你已經在創建A'的'一個實例製成的'B'相關的初始化。 – user1329572
[靜態變量初始化java]的可能的重複(http://stackoverflow.com/questions/1642347/static-variable-initialization-java) – nandeesh