直接上**,熱乎的:
package test;
/**有父類的情況
1. 載入父類
1.1 為靜態屬性分配儲存空間並賦初始值
1.2 執行靜態初始化塊和靜態初始化語句(從上至下)
2. 載入子類
2.1 為靜態屬性分配儲存空間
2.2 執行靜態初始化塊和靜態初始化語句(從上至下)
3. 載入父類構造器
3.1 為例項屬性分配存數空間並賦初始值
3.2 執行例項初始化塊和例項初始化語句
3.3 執行構造器內容
4. 載入子類構造器
4.1 為例項屬性分配存數空間並賦初始值
4.2 執行例項初始化塊和例項初始化語句
4.3 執行構造器內容
5 回到main()
內部類的載入過程也一樣
*/public class test
}class a
// 6
private p p2 = new p("a--p2");
static
");} public static class c
// 16
private p p2 = new p("c--p2");
static
");} }
public void geti()
/*** private的final方法
*/private final void checkfinal()
}class b extends a
// 10
public p p2 = new p("b -- p2");
static
");} public void geti()
/*** 此時是看不到父類的私有方法所以不會報錯。
*/private void checkfinal()
}class p }/*
1 a--p3
2 a--static
3 b -- p3
4 b -- static
5 a--p1
6 a--p2
7 a8 a()
9 b --p1
10 b -- p2
11 b
12 b()
13 c--p3
14 c--static
15 c--p1
16 c--p2
17 c
18 c()
19 **********==
20 son i:20
21 1
22 **********==
23 son i:20
24 20
*/
類的載入順序
類載入的順序 1.載入靜態成員 塊 先遞迴地載入父類的靜態成員 塊 object的最先 再依次載入到本類的靜態成員。同乙個類裡的靜態成員 塊,按寫 的順序載入 靜態 塊和靜態成員誰在前面就先載入誰 如果其間呼叫靜態方法,則呼叫時會先執行靜態方法,再繼續載入。同乙個類裡呼叫靜態方法時,可以不理會寫 的...
類的載入順序
初始化過程 1.初始化父類中的靜態成員變數和靜態 塊 2.初始化子類中的靜態成員變數和靜態 塊 3.初始化父類的普通成員變數和 塊,再執行父類的構造方法 4.初始化子類的普通成員變數和 塊,再執行子類的構造方法 class x class y public class zextends x publ...
類的載入順序
public class base public void callname static class sub extends base public static void main string args 執行base b new sub 時由於多型 b編譯時表現為base類特性,執行時表現為s...