次のコードでエラーが発生する理由をお聞きしたいと思います。
class A
{
A()
{
statObj.x = 5;
}
int x;
static A statObj = new A();
}
ExceptionInInitializerError が発生します。理由がわかりません。この場合、静的変数statObj
は最初のものとして初期化されます。したがって、私が正しければ、静的オブジェクトstatObj = new A()
が最初のものとして作成されます。
この内部静的オブジェクトの作成と初期化の順序は? 内部静的オブジェクト コンストラクターが呼び出される前に、statObj.x の既定値が 0 で初期化されていませんstatObj.A()
か? その場合、なぜ statObj.x が初期化されていないように動作するのですか (デフォルトで 0 の値で初期化されたと私は戦いました)。
もう1つ、この問題がメソッドではなくコンストラクタでのみ発生するのはなぜですか? 次のコードは正常に動作します。
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();
}
}