-1

このプログラムを実行すると、iSIBではなく値のみが取得されます。私の質問は、メモリへのクラスのロードSIBが実行され、ooutputを提供する必要がある場合ですが、ここではi値のみを取得していますか?次に、あるメソッドをクラステストに保持し、そのメソッドを別のクラスから呼び出すと、SIB、iメソッドの出力が得られます(メソッドを静的finalとしても保持します)

    class Test      
    {
    static final int i =3;  
    static
    {
        System.out.println("SIB");
    }
    {
        System.out.println("IIB");
    }
    }
    class A1
    {
    public static void main(String[] args) 
    {
        System.out.println(Test.i);
    }
    }
4

1 に答える 1

7

static final変数はコンパイル時定数であり、その値はそれを参照する他のクラスにコピーされます。したがって、クラスTestはロードされず、初期化子は実行されません。変数が、のみの場合static、現在の値を読み取るためにクラスをロードする必要があり、SIBブロックが実行されます。IIBブロックは、でインスタンス化 Testした場合にのみ実行されますnew Test()

于 2013-02-19T10:10:33.963 に答える