我想問一下,爲什麼下面的代碼會導致錯誤:的Java初始化順序錯誤
class A
{
A()
{
statObj.x = 5;
}
int x;
static A statObj = new A();
}
我得到的ExceptionInInitializerError。我不明白爲什麼。在這種情況下,靜態變量statObj
將被初始化爲第一個。所以,如果我是對的,靜態對象statObj = new A()
將被創建爲第一個。
這個內部靜態對象的創建和初始化的順序是什麼?在內部靜態對象構造函數調用statObj.A()
之前,是不是將statObj.x默認值初始化爲0值?如果那樣,爲什麼statObj.x的行爲像它沒有被初始化(我爭取它是默認初始化0值)?
還有一個爲什麼這個問題只出現在構造函數中,而不是在方法中?下面的代碼工作正常:
class A
{
A()
{
}
void met1()
{
statObj.x = 5;
}
int x;
static A statObj = new A();
}
public MainClass
{
public static void main(String[] arg)
{
A a = new A();
a.statObj.met1();
}
}
你爲什麼認爲它會起作用? –