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*/
}