1. 程式人生 > >帶有繼承和靜態的類的初始化以及載入過程(重要)

帶有繼承和靜態的類的初始化以及載入過程(重要)

package com.google.test;

public class BaseClass {
public void haha(){
printInit(“haha”);
}
private int i = 9;
protected int j;
public BaseClass() {
// TODO Auto-generated constructor stub
System.out.println(“i=” + i + “,” + “j=” + j);
j = 39;
}
private static int x1 = printInit(“1”);

static int printInit(String s) {
    // TODO Auto-generated method stub
    System.out.println(s);
    return 47;
}

void testBaseNormalMethod() {
    System.out.println("BaseNormalMethod()");
}

}

package com.google.test;

public class TestClassInit extends BaseClass{

/**
     父類程式碼註釋
  public class BaseClass {
    public void haha(){
        printInit("haha");
    }
    private int i = 9;
    protected int j;
    public BaseClass() {
        // TODO Auto-generated constructor stub
        System.out.println("i=" + i + "," + "j=" + j);
        j = 39;
    }
    private static int x1 = printInit("1");

    static int printInit(String s) {
        // TODO Auto-generated method stub
        System.out.println(s);
        return 47;
    }

    void testBaseNormalMethod() {
        System.out.println("BaseNormalMethod()");
    }

}*/
private void testNomalMethod1(){
    System.out.println("NomalMethod1()");
}
private int k = printInit("3");
public TestClassInit(){
    System.out.println("k=" + k);
    System.out.println("j=" + j);

}
private int k2 = printInit("4");
private void testNomalMethod2(){
    System.out.println("NomalMethod2()");
}
public static void main(String[] args) {
    System.out.println("2");
    TestClassInit testClassInit = new TestClassInit();
}

private static int x2 = printInit("test");

/**
 * 步驟如下:
 * 1.先編譯子類.class載入,看到extents後加載父類,先找靜態的方法得出結果:1(這一步不管子類有沒有建立子類物件都要執行)
 * 2.父類執行完以後執行子類的靜態方法
 *  (1.普通靜態方法優先於main方法執行,雖然main方法也是靜態的,2.同樣這一步不管子類有沒有建立子類物件都要執行)得出結果:test ,2
 * 3.建立子類物件時候呼叫子類構造方法,子類構造方法預設有一條super()來呼叫父類構造方法,這時候不會呼叫父類構造方法之前的普通方法。
 *  得出結果:i=9,j=0。注意:基本型別boolean預設值為false,char預設值為:\u0000,其他全部為0,引用型別預設值為null。
 * 4.執行子類從父類繼承下來的靜態方法,然後執行自身的構造方法,得出結果:3,(k=47);4(k2=47)
 * 5.執行自身的構造方法。得出結果:k=47,j=39

 */

/**執行結果:
 *  1
    test
    2
    i=9,j=0
    3
    4
    k=47
    j=39*/

}