Java では、新しいオブジェクトを作成すると、オブジェクト内のメンバー、初期化ブロック、コンストラクターが特定の順序でロードされます。以下の図を参照してください:
1. 単一クラス (基本クラスなし) ):
public class Parent {
static String staticStr = "親クラスの静的変数";
private String str = "親クラスのメンバー変数";
static {
System.out. System.out.println("親クラスの静的初期化ブロック");
}
{
System.out.println(str);
System.out.println("親クラスの初期化ブロック");
}
public Parent() {
System.out.println("親クラス構築");
}
public static void main(String[] args ) {
new Parent ();
親クラスの初期化ブロック 親クラスの構造 親クラスの構造
単一クラスの順序: ① 静的 (メンバー、ブロック) > 非静的 (メンバー、ブロック) > 構築
メンバーの順序and ブロックは、「クラス内で定義される前後の位置、最初に指定されたものが最初に初期化される」に依存します。
③ 静的メンバーまたはブロックはクラスに属しているため、最初に初期化され、初期化されるのは 1 回だけです。 construment最後に実行される建設。
2. 継承クラスの初期化シーケンス
class SubClass extends Parent {
static String staticStr = "サブクラスの静的変数";
private String str = "サブクラスのメンバ変数";
static {
System.out.println(staticStr);
System.out.println("サブクラス静的初期化ブロック");
}
{
System.out.println(str);
システム。 out.println("サブクラス初期化ブロック");
}
public SubClass() {
System.out.println("サブクラス構築");
}
public static void main(String [] args) {
System.out.println("サブクラスのメインメソッド");
new SubClass();
}
}
出力:親クラスの静的変数
クラスの静的初期化ブロック 子クラス static変数 静的変数
サブクラスの静的初期化ブロック
subcate Main メソッド
親クラスの変数
親初期化ブロック
親クラスのメンバー変数 初期化ブロックのイニシアチブ
継承順序:
① 親クラス static (メンバー、ブロック)> サブクラス static (メンバー、ブロック)> 親クラス 非静的 (メンバー、ブロック) 非静的 (メンバー、ブロック) > サブクラスの構築メンバーとブロックの順序は次のとおりです。単一クラスの場合と同様 非静的クラス (メンバーとブロック) は、静的クラスに属しているため、非静的クラスとコンストラクターの場合は、サブクラスをロードする前にすべての親クラスをロードするのが自然です。