package com.google.test;
public class baseclass
private int i = 9;
protected int j;
public baseclass()
private static int x1 = printinit(「1」);
static int printinit(string s)
void testbasenormalmethod()
package com.google.test;
public class testclassinit extends baseclass
private int i = 9;
protected int j;
public baseclass()
private static int x1 = printinit("1");
static int printinit(string s)
void testbasenormalmethod()
}*/private void testnomalmethod1()
private int k = printinit("3");
public testclassinit()
private int k2 = printinit("4");
private void testnomalmethod2()
public static void main(string args)
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
2i=9,j=034
k=47
j=39*/
初始化塊和靜態初始化塊
初始化塊的使用 變數,靜態變數,方法,靜態方法 由圖可知變數沒問題 上面的方法不可行能否初始化靜態方法 嘗試使用初始化塊初始化構造方法 最後比較一下構造方法初始化,初始化塊初始化,靜態初始化塊初始化當中誰最先被初始化 package staticinitializelump public class...
繼承類的初始化
執行時,先訪問main函式。載入器開始啟動並找出該類的編譯 載入時,由於extends知道有乙個基類,於是載入基類。如果基類仍舊有基類,那麼再載入。直到所有的基類載入完畢。很重要的一點是static方法是在載入類的時候就被執行了,而static域也在此時也會在此時進行初始化。所有的類載入完畢。開始建...
類的繼承和類的初始化
父類 子類 class a para1 para def init self,name,name1 self.name name self.name1 name1 def function1 self print function1 def functon2 self print function2...