この記事では、Java のインスタンス初期化ブロック (IIB) について詳しく説明します。必要な方は参考にしてください。
Java 言語のクラス初期化ブロック この記事では、Java のインスタンス初期化ブロック (IIB) について簡単に紹介しました。ただ、紹介が少し簡単だと思うので、詳しくはまた別の記事で紹介したいと思います。
Java 言語には、メソッド、コンストラクター、初期化ブロックという 3 つの操作があります。
初期化ブロックは、インスタンス初期化ブロック (IIB) と静的初期化ブロックに分かれています。この章では、主にインスタンスの初期化ブロックについて説明します。
インスタンス初期化ブロックは、インスタンス変数を初期化するために使用されます。
インスタンス初期化ブロックは、クラスのインスタンスを初期化するときに実行され、コンストラクターの前に実行されます。そして、クラスのオブジェクトが作成されるたびに実行されます。
インスタンス化ブロックの構文
インスタンス初期化ブロックは通常、コンストラクターの前に配置され、中括弧 {}
を使用してコードを展開します。 。構文構造は一般に次のとおりです
class JavaTester { // 实例化块 { System.out.println("IIB block"); } // 构造函数 JavaTester() { System.out.println("Constructor Called"); } public static void main(String[] args) { JavaTester a = new JavaTester(); } }
インスタンス化ブロックはクラスには必要ないことに注意してください。ただのオプションです。コンストラクターのパブリック部分を抽出し、個別に実行するために使用されます。
#このコードはコンパイルして実行でき、実行結果は次のとおりです。[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester IIB block Constructor Called#クラスには複数のインスタンス初期化ブロックが含まれています
# class ##インスタンス初期化ブロック
はクラスに必須ではなく、数に制限はありません。クラスには、インスタンス初期化ブロックを含めないか、複数のインスタンス初期化ブロックを含めることができます。クラスに複数のインスタンス初期化ブロックがある場合、それらは上から下へ順番に実行されます。つまり、クラスの先頭に定義されたインスタンス初期化ブロックが最初に実行されます。
次のクラス JavaTester では、複数のインスタンス初期化ブロックが定義されているコードを見てみましょう。class JavaTester { { System.out.println("IIB1 block 1 "); } { System.out.println("IIB2 block 2"); } JavaTester() { System.out.println("Constructor Called"); } { System.out.println("IIB3 block 3"); } public static void main(String[] args) { JavaTester a = new JavaTester(); } }上記のコードを実行すると、出力結果は次のようになります。
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester IIB1 block 1 IIB2 block 2 IIB3 block 3 Constructor Called
親クラスの初期化ブロック
Java の継承システムでは、言語に応じて、親クラスにも初期化ブロックを含めることができ、数に制限はありません。
親クラスのインスタンス初期化ブロックは、子クラスのコンストラクターでsuper()
を呼び出した直後に実行されます。コンパイラは、現在のクラスのインスタンス初期化ブロックを実行する前に、親クラスのインスタンス初期化ブロックを実行します。これは非常に複雑ではありませんか?
class B { B() { System.out.println("B-Constructor Called"); } { System.out.println("B-IIB block"); } } public class JavaTester extends B { { System.out.println("JavaTester IIB1 block 1 "); } { System.out.println("JavaTester IIB2 block 2"); } JavaTester() { super(); System.out.println("JavaTester-Constructor Called"); } { System.out.println("JavaTester IIB3 block 3"); } public static void main(String[] args) { JavaTester a = new JavaTester(); } }上記の例を実行するためのコードを書いてみましょう。出力結果は次のとおりです。
[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester B-IIB block B-Constructor Called JavaTester IIB1 block 1 JavaTester IIB2 block 2 JavaTester IIB3 block 3 JavaTester-Constructor Called実行結果から、JavaTester のクラス オブジェクトを作成するとき、コンパイラーはクラス JavaTester のコンストラクターを実行しようとします。ただし、親クラスがあるため、
super()
ステートメントを検出すると、最初に親クラスのコンストラクターの実行に切り替わります。 したがって、継承方式では、インスタンス初期化ブロックとコンストラクタの実行順序は次のようになります。
インスタンス初期化ブロックの主要なポイントを確認しましょう。
#インスタンス初期化ブロックは、新しいインスタンスが作成されるたびに実行されます
初期化ブロックは、クラス内に出現する順序で実行されます
親クラスがある場合、最初に親クラスがインスタンス化され、次に現在のクラスのインスタンス初期化ブロックが呼び出され、最後に現在のクラスのコンストラクターが呼び出されます。
以上がJava のインスタンス初期化ブロック (IIB) の詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。