JVMクラスのロードメカニズムテストの概要

1436 ワード

public class TestJVM {

	public static void main(String[] args) {
		B b = new B();
	}

}

class A{
	public static int a_int;
	private int test = 10;
	{
		System.out.println("A  a_int :"+a_int);
		System.out.println("A  test :"+test);
		test = 20;
	}
	
	static{
		System.out.println("A  a_int :"+a_int);
		a_int =300;
		//test = 10; 
	}
	
	public A(){
		System.out.println("A  a_int :"+a_int);
		a_int =400;
		System.out.println("A  test :"+test);
		test = 30;
	}
}


class B extends A{
	public static int b_int =200;
	private int b_test = 10;
	{
		System.out.println("B b_int :"+b_int);
		System.out.println("B  test :"+b_test);
		b_test = 20;
	}
	
	static{
		System.out.println("B  b_int :"+b_int);
		b_int =300;
	}
	
	public B(){
		System.out.println("B  b_int :"+b_int);
		b_int =400;
		System.out.println("B  test :"+b_test);
		b_test = 30;
	}
	
}

出力は次のとおりです.
A静的文ブロックa_int :0       1.B bの実行時に親がロードして初期化されていない場合、まず初期化親をロードし、静的変数初期化(デフォルト値0)を実行し、静的文ブロックBの静的文ブロックb_を実行するint :200       2.親ロード初期化完了後、サブクラスのロード初期化を行い、静的変数初期化(設定値200)を実行し、静的文ブロックA文ブロックa_を実行するint :300              3.new B()を実行します.まず、親変数を初期化し、親文ブロックを実行します(変数初期化と文ブロック実行はコード順).次に、親構造メソッドを実行します.A文ブロックtest:10 Aコンストラクタa_int:300 Aコンストラクタtest:20 B文ブロックb_int :300 4.サブクラス文ブロックの実行、サブクラス変数の初期化、サブクラス文ブロックの実行、サブクラス構築方法B文ブロックtestの実行:10 Bコンストラクタb_int:300 Bコンストラクタtest:20