2012-02-24 8 views
1

クラスインスタンスが作成されるたびに、インスタンスのinitブロックが実行されることは私の理解である。これをテストしようとすると、最初の2つのインスタンスに対してインスタンスのinitブロックが実行されましたが、3番目のインスタンスは実行されませんでした。ここでJava - 新しいインスタンスが新しいインスタンスInitブロックを実行していない

コードです:

class ModuleInit { 
    ModuleInit (int x) { System.out.println("1-arg const"); } 
    ModuleInit() { System.out.println("No-arg const"); } 
    static { System.out.println("First static init"); } 
    { System.out.println("1st instance init"); } 
    { System.out.println("2nd instance init"); } 
    static { System.out.println("2nd static init"); } 

    public static void main(String[] args) 
    { 
     new ModuleInit(); 
     new ModuleInit(8); 
    } 
} 

、ここでは出力です:

First static init 
2nd static init 
1st instance init 
2nd instance init 
No-arg const 
1st instance init 
2nd instance init 
1-arg const 
       <---Missing instance init for ModuleInt(int x)? 

私は別のインスタンスが存在すべきであることを(ModuleInit(8))int型の引数を持つ新しいクラスのインスタンスが作成されたときと思いましたinitブロック実行。誰かがなぜこれがここで起こらないのか説明できますか?

+2

'クラスModuleInit'とコンストラクタ' Module4(int型x) 'は?何かが間違っている。 – Viruzzo

答えて

3

コンストラクタ内の最初の行として実行インスタンス初期化ブロック(すなわち、暗黙的または宣言するかどうか、super()又はthis()の呼び出しの後、である)、コンストラクタは、その行を出力する前に、それらが実行されているように:

First static init 
2nd static init 
1st instance init 
2nd instance init 
No-arg const 
1st instance init <---- They are right here... 
2nd instance init <---- They are right here... 
1-arg const 

このコードは同等のようになります。

class Module4 { 
    Module4 (int x) { 
     System.out.println("1st instance init"); 
     System.out.println("2nd instance init"); 
     System.out.println("1-arg const"); 
    } 
    Module4() { 
     System.out.println("1st instance init"); 
     System.out.println("2nd instance init");    
     System.out.println("No-arg const"); 
    } 
    static { System.out.println("First static init"); } 
    //{ System.out.println("1st instance init"); } 
    //{ System.out.println("2nd instance init"); } 
    static { System.out.println("2nd static init"); } 

    public static void main(String[] args) 
    { 
     new ModuleInit(); 
     new ModuleInit(8); 
    } 
} 
+0

私は、彼らが走ったと思っていたに違いない。ありがとう! – HSeldon

関連する問題