4

コンストラクターの外部でメンバー変数を初期化した場合、メンバーは実際にいつ初期化されますか?クラスのすべての可能なコンストラクターに対して初期化されることが保証されていますか?

public class MyClass
{
    private String myName = "MyClass";

    public MyClass(int constructor1Arg)
    {}

    public MyClass(int constructor2Arg1, int constructor2Arg2)
    {}
}
4

3 に答える 3

14

はい。すべてのインスタンス変数初期化子は、スーパーコンストラクターが実行された後、このクラスで宣言されたコンストラクターの本体の前に実行されます。

(Jigar Joshiが言及しているように、これはスーパーコンストラクターが正常に実行されることを前提としています。)

于 2012-04-16T17:34:06.413 に答える
3

はい、オブジェクトの作成中に例外がない場合

于 2012-04-16T17:33:36.027 に答える
3

Java言語仕様によると:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5

以前の初期化でエラーがスローされない限り、インスタンス変数はコンストラクターが呼び出される前に初期化されます。

このクラスのインスタンス初期化子とインスタンス変数初期化子を実行し、インスタンス変数初期化子の値を、クラスのソースコードにテキストで表示される左から右の順序で、対応するインスタンス変数に割り当てます。これらの初期化子のいずれかを実行すると例外が発生した場合、それ以上の初期化子は処理されず、この手順は同じ例外で突然完了します。それ以外の場合は、手順5に進みます。

(ステップ5はコンストラクターを実行しています)

于 2012-04-16T17:34:11.937 に答える