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