コンストラクション関数、静的文ブロック、非静的文ブロックの実行順序

1373 ワード

1テスト用の親

public class testFather {
	public testFather(){
		System.out.println("       ,  ");
	}
	public testFather(String a){
		System.out.println("       ,  ,   "+a);
	}
	//      
	{
		System.out.println("           !");
	}
	//     
	static{
		System.out.println("          !");
	}

}

2.テストに使用するサブクラス

public class testSon extends testFather{
	public testSon(){
		System.out.println("          !");
	}
	public testSon(String a){
		System.out.println("          ,   "+a);
	}
	//      
	{
		System.out.println("         !");
	}
	//     
	static{
		System.out.println("        !");
	}
}

3.試験方法類

public class testOrder {
	public static void main(String[] args) {
		new testSon();
//		new testSon("a");
	}
}

出力結果:私は親クラスの静的文ブロックです.サブクラスの静的文ブロック!私は親クラスの非静的文ブロックです.私はパラメータなしで構築され、親クラスのサブクラスの非静的文ブロックです.私はサブクラスの無パラメータ構造です!
テスト結果:親の静的文ブロック>子の静的文ブロック>親の非静的文ブロック>親の構築>子の非静的文ブロック>子の構築の順序:1.静的文ブロックの優先度が最も高く、親が子より高い.      2.非静的文ブロックは、構築の前に実行され、親クラスの実行中の子クラスの