Java継承における構築コードブロックと構築メソッドの実行順序--階層初期化
1440 ワード
階層の初期化
階層初期化:クラスの初期化時に階層化され、継承では親オブジェクトの初期化プロセスを先に行い、親オブジェクトの初期化プロセスが終了した後、サブオブジェクトの初期化プロセスを行います.
説明:サブクラスの構築方法では、明示的または暗黙的にsuper()を呼び出すにかかわらず、親クラスのメンバー変数を初期化プロセス(構築コードブロック->構築方法)に移行し、親クラスの初期化プロセスが終了した後、サブクラスの初期化プロセス(構築コードブロック->構築方法)に移行します.
理解:(先父後子)まず親がいて、後に子がいなければなりません.親がいなければ子はいません.
特殊:
staticは、クラスの変数またはメソッドを修飾するために使用され、クラスのロードに伴ってロードされる必要があります.オブジェクトの初期化プロセスよりも早い必要があります.(親の静的初期化>子の静的初期化)
コード:
印刷結果:
結論:
(1)親子の初期化順序:親初期化>子初期化.
(2)クラスの静的コードブロック:親クラスの静的コードブロック>サブクラスの静的コードブロック.このステップはクラスのロードに伴ってロードされます.
(3)オブジェクトの初期化プロセス:親オブジェクトの初期化プロセス(構築コードブロック->構築方法)>子オブジェクトの初期化プロセス(構築コードブロック->構築方法).このステップは、クラスのロードに従ってロードされます.
(4)クラスの静的コードブロック>オブジェクトの初期化プロセス.
(5)クラスのロード>オブジェクトの作成.
最後:
親の静的コードブロック>子の静的コードブロック>親オブジェクトの初期化プロセス(構築コードブロック->構築方法)>子オブジェクトの初期化プロセス(構築コードブロック->構築方法).
階層初期化:クラスの初期化時に階層化され、継承では親オブジェクトの初期化プロセスを先に行い、親オブジェクトの初期化プロセスが終了した後、サブオブジェクトの初期化プロセスを行います.
説明:サブクラスの構築方法では、明示的または暗黙的に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)クラスのロード>オブジェクトの作成.
最後:
親の静的コードブロック>子の静的コードブロック>親オブジェクトの初期化プロセス(構築コードブロック->構築方法)>子オブジェクトの初期化プロセス(構築コードブロック->構築方法).