1

このコードの理由がわかりません:

class HelloWorld
{
    HelloWorld()
    {
        System.out.println("1 cnstr ");
    }

    public static void main(String[] args)
    {
        HelloWorld a = new HelloWorld();
    }


    {
        System.out.println("2 cnstr ");
    }
}

出力が得られます:

2 cnstr
1 cnstr

なぜラインがSystem.out.println("2 cnstr ");機能するのですか?どんなブロックですか?私は、コンストラクター内の任意の行の前に、この行でブロックを開始することを使用jdbして発見しました。JVMHelloWorld()

ご協力いただきありがとうございます。

4

2 に答える 2

6
{
        System.out.println("2 cnstr ");
    }

そのインスタンス初期化ブロック。クラスのコンストラクターが実行される前に実行されます。

ドキュメントから:

Javaコンパイラは、初期化ブロックをすべてのコンストラクタにコピーします。したがって、このアプローチを使用して、複数のコンストラクター間でコードのブロックを共有できます。

于 2013-01-06T11:36:47.710 に答える
5

これはインスタンス初期化ブロックであり、各コンストラクターの前に実行されます。

于 2013-01-06T11:37:52.020 に答える