2012-04-16 3 views
4

コンストラクタの外でメンバ変数を初期化すると、メンバはいつ実際に初期化されますか?クラスのすべての構築者が初期化されることが保証されていますか?Java:コンストラクタの外にあるメンバの初期化は、常に呼び出されることが保証されていますか?

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

    public MyClass(int constructor1Arg) 
    {} 

    public MyClass(int constructor2Arg1, int constructor2Arg2) 
    {} 
} 
+8

はい、オブジェクト –

+0

の作成も参照しながら、例外がない場合http://docs.oracle.com/javase/のステップに進みますチュートリアル/ java/javaOO/initial.html。 –

答えて

15

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

(Jigarジョシは言及したように、これはsuperconstructorが正常に実行すると仮定されている。)

3

はい、例外がない場合はしばらくオブジェクトの作成

3

をJava言語仕様によると:

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

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

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

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

関連する問題