3つの初期化ブロックでの注文のJavaの実装のための多くの小さなパートナーは、頭痛となっている、我々は最終的にこれら三つの初期化ブロックを分析する必要が実行する方法です。一部の企業はまた、書かれた質問を発行します。
コードの一部が対象な初期化ブロックを作成する際に経由見てみましょうを実行する方法です
パッケージcom.hxy。 パブリック クラスコードブロック{ 公共 静的 ボイドメイン(文字列[]引数){ 新しいHelloB()。 // 新しいHelloB(); } } クラスHelloA { // 引数なしのコンストラクタ パブリックHelloA(){ System.out.println( "こんにちはA" ); } // 初期化ブロック { System.out.println( "私はAです" ); } // 静的初期化子ブロック 静的{ System.out.println( "静的A" )。 } } クラス HelloBは延びHelloA { 公共HelloBを(){ System.out.println( "こんにちはB" ); } { System.out.println( "私はBです" ); } 静的{ System.out.println( "静的B" )。 } }
下に示すような結果を操作します:
ビューの動作結果ポイントから、新しく作成されたオブジェクトに、プログラム最初の実行は、コンストラクタを実行し、ブロックを初期化。
通常の静的初期化ブロックを変更すると、となる、クラス初期化ブロックと呼ばれる、静的初期化ブロック。
一般的な初期化ブロックのオブジェクトが初期化され、静的クラスの初期化ブロックが初期化されます。通常の初期化ブロックよりもので、静的な初期化ブロックは、最初に実行します。
以上の結果から実行を確認します。あなたは最初HelloBを作成すると、最初のロード及び初期化HelloBクラスオブジェクト。HelloBクラス初期化が最初のブロック初期親クラスの静的(スタティックA)を実行し、それは静的な初期化ブロックを実行します。
要約すると:初期化ブロックの実行順序:静的初期化ブロック、初期化ブロック普通ビルダーを。
彼らは2 HelloBを作成するオブジェクトで、次回の外観は、実行する方法です。ここでの結果は以下のとおりです。
実行中の結果から、予想外に小さなパートナーがあります。
静的初期化ブロックは関係なく、何回かは、オブジェクトを作成することを、あなたが最初のオブジェクトを作成する場合にのみ実行されます。静的初期化ブロックは一度だけ実行されます。一般的なコンストラクタのコードブロックが作成され、実行に数回、コンストラクタよりも実行するための通常のコードブロックされています。