ステップ 1: クラスをロードする: Java オブジェクトは初期化前にクラスがロードされ、JVM に Class オブジェクトが生成されます。クラスをロードすると次の操作が実行され、再帰的な説明が以下に与えられます。
クラスに親クラスがある場合は、その親クラスが最初にロードされます。
i このクラスの静的メンバーを初期化します
ii このクラスの静的コード ブロックを実行します
2 番目のステップ: オブジェクトの作成クラスに親クラスがある場合、オブジェクトの作成時に、最初にその親クラスのオブジェクトが作成され、サブクラスのプロパティとメソッドが外側の層でラップされ、次にサブクラスの参照が返されますが、再帰的に説明すると以下のようになります。
クラスに親クラスがある場合は、最初に親クラスのオブジェクトを作成します。
i このクラスの通常のメンバーを初期化します
ii 通常のコード ブロックを実行します
iii クラス構築メソッドを呼び出します
例:
このクラス オブジェクトはメンバー変数として使用されます
public class Info{ public Info(String s) { System.out.println(s); } }
親クラス
public class Parent { public static Info info = new Info("Parent static member"); //静态成员 public Info info2 = new Info("Parent common member"); //普通成员 static { //静态代码块 System.out.println("parent static block"); } { //普通代码块 System.out.println("parent common block"); } public Parent() { //父类构造方法 System.out.println("Parent.Parent()"); } }
サブクラス
public class Child extends Parent{ public static Info info = new Info("Child static member"); //静态成员 public Info info2 = new Info("Child common member"); //普通成员 static { //静态代码块 System.out.println("Child static block"); } { //普通代码块 System.out.println("Child common block"); } public Child() { //子类构造方法 System.out.println("Child.Child()"); } }
次のテスト クラスの読み込みプロセスでは、オブジェクトを作成せず、直接クラスを読み込み、サブクラスを読み込みます
public class InitObjectTest{ public static void main(String[] args) { try{ //Class.forName("Parent"); Class.forName("Child"); }catch(Exception e){ } //System.out.println("=============== now , we create an Object below ==========="); //new Parent(); } }
テスト結果:
テスト結果は、上記のクラスをロードするための規則に準拠しています。最初に親クラスの静的メンバーを初期化し、次に親クラスの静的ブロックを実行し、次にサブクラスの静的メンバーを初期化します。 、最後にサブクラスの静的ブロックを実行します。クラスがロードされると、静的メンバーが実際に初期化されることがわかります。
Note: クラスは 1 回だけロードされ、後でオブジェクトが作成されるとクラスはロードされなくなるため、静的コード ブロックは 1 回だけ実行されます。
推奨チュートリアル: Java 入門チュートリアル
以上がJavaでオブジェクトを初期化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。