-3

以下は、私の意見では、最初の通知で呼び出される必要がある2つの静的ブロックがあるプログラムですが、上から下に順番に呼び出されますが、それは起こりません

public class StaticTest {  
    public static void main(String[] args) {  
        A a1 = new A();  
        A a2 = new A();  
        B b1 = new B();  
    }
}  

class A {  
    static {  
        System.out.println("Static block of Class A");  
    }  
    {  
        System.out.println("Non-Static block of a instance of Class A");  
    }  
    public A() {  
        System.out.println("Constructing object of type A");  
    }  
}  
class B {  
    static {  
        System.out.println("Static block of Class B");  
    }
    {  
        System.out.println("Non-Static block of a instance of Class B");  
    }
    public B() {  
        System.out.println("Constructing object of type A");  
    }  
}   
4

5 に答える 5

2

の静的ブロックは、実際に必要にclass Bなるまで実行されません。Bこれは、main メソッドの 3 番目のステートメントの場合のみです。実際、その行を次のように置き換えると、

if (2*2 == 5) new B();

BB がロードされることさえないため、 の静的ブロックが実行されないことに気付くでしょう。

クラスのロードをトレースする-verbose:classには、java コマンドのオプションを使用します。

于 2013-07-04T13:10:48.033 に答える