Java オブジェクトは、初期化中に独自の構築メソッドを呼び出すだけでなく、静的ステートメント ブロック、インスタンス ステートメント ブロック、静的変数の初期化、メンバー変数の初期化などの実行の問題も伴います。 、など。初期化シーケンスは、これら 5 つの部分の実行シーケンスを指します。
package com.javase.classtest;public class InitializationSequence {static { System.out.println("静态语句块"); }static MyInnerClass in = new MyInnerClass("静态变量s"); MyInnerClass in01 = new MyInnerClass("a"); { System.out.println("实例语句块"); } MyInnerClass in02 = new MyInnerClass("b");public InitializationSequence() { System.out.println("构造函数"); } @SuppressWarnings("unused")public static void main(String[] args) { InitializationSequence obj01 = new InitializationSequence(); System.out.println("-----------------------------------"); InitializationSequence obj02 = new InitializationSequence(); } }class MyInnerClass {public MyInnerClass(String description) { System.out.println("成员变量初始化::" + description); } }
実行結果:
分析:
クラスがロードされるときに実行されますJVM の使用により、 JVM クラスの前提条件 クラスは JVM 仮想マシンにロードされるため、静的ステートメント ブロックが最初に実行され、クラスは 1 回だけロードされ、静的ステートメント ブロックは 1 回だけ実行されます。
静的変数の初期化: 静的変数はクラスのすべてのインスタンスによって共有され、特定のオブジェクトに依存しないため、オブジェクトの作成時には初期化されませんが、クラスがロードされるときに初期化シーケンスが行われます。 static ステートメントブロック内 その後は 1 回だけ実行してください。
インスタンス ステートメント ブロック: コンストラクター メソッドの前に実行され、コンストラクター メソッドが呼び出されるたびに 1 回実行されます。実行順序は静的変数の初期化後であり、メンバ変数の初期化を基準とします。実際の順序は定義の順序に依存します。変数が初期化される場合、後でメンバー変数が初期化された後に実行されます。
メンバー変数の初期化: コンストラクターの前に実行され、コンストラクターが呼び出されるたびに 1 回実行されます。実行順序 静的変数の初期化後のインスタンス ステートメント ブロックに対する実行順序は、定義順序に依存します。
構築方法: 最後に実行されます。
要約すると、Javaオブジェクト初期化の実行順序は、静的ステートメントブロック>静的変数初期化>インスタンスステートメントブロック/メンバー変数初期化>コンストラクターメソッドであり、インスタンスステートメントブロックとメンバー変数初期化の相対関係は、実行順序は定義の順序によって異なります。
以上がJavaオブジェクトが初期化される順序の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。