Java継承における構築コードブロックと構築メソッドの実行順序--階層初期化

1440 ワード

階層の初期化
階層初期化:クラスの初期化時に階層化され、継承では親オブジェクトの初期化プロセスを先に行い、親オブジェクトの初期化プロセスが終了した後、サブオブジェクトの初期化プロセスを行います.
説明:サブクラスの構築方法では、明示的または暗黙的にsuper()を呼び出すにかかわらず、親クラスのメンバー変数を初期化プロセス(構築コードブロック->構築方法)に移行し、親クラスの初期化プロセスが終了した後、サブクラスの初期化プロセス(構築コードブロック->構築方法)に移行します.
理解:(先父後子)まず親がいて、後に子がいなければなりません.親がいなければ子はいません.
特殊:
staticは、クラスの変数またはメソッドを修飾するために使用され、クラスのロードに伴ってロードされる必要があります.オブジェクトの初期化プロセスよりも早い必要があります.(親の静的初期化>子の静的初期化)
コード:
class Father {
	static {
		System.out.println("     	Father");//     (1 )
	}

	{
		System.out.println("     	Father");//        (  )
	}

	public Father() {
		System.out.println("    		Father");
	}
}

class Son extends Father {
	static {
		System.out.println("     	Son");//     (1 )
	}

	{
		System.out.println("     	Son");//        (  )
	}

	public Son() {
		System.out.println("    		Son");
	}
}

印刷結果:
     	Father
     	Son
     	Father
    		Father
     	Son
    		Son

結論:
(1)親子の初期化順序:親初期化>子初期化.
(2)クラスの静的コードブロック:親クラスの静的コードブロック>サブクラスの静的コードブロック.このステップはクラスのロードに伴ってロードされます.
(3)オブジェクトの初期化プロセス:親オブジェクトの初期化プロセス(構築コードブロック->構築方法)>子オブジェクトの初期化プロセス(構築コードブロック->構築方法).このステップは、クラスのロードに従ってロードされます.
(4)クラスの静的コードブロック>オブジェクトの初期化プロセス.
(5)クラスのロード>オブジェクトの作成.
最後:
親の静的コードブロック>子の静的コードブロック>親オブジェクトの初期化プロセス(構築コードブロック->構築方法)>子オブジェクトの初期化プロセス(構築コードブロック->構築方法).