以下這個例子非常好的闡述了父子類同時存在時靜態代碼塊/靜態變數初始化,普通代碼塊/普通成員變數初始化,構造器之間的具體運行順序,
注意,在構造器開頭,我們可以看作按順序隱藏了以下兩行關鍵執行步驟:
super();
普通代碼塊和普通屬性的初始化...
具體例子如下,運行順序在代碼注釋中以數字括號給出~
public class CodeBlockDetail {
public static void main(String[] args) {
//(1) 進行類的加載
//1.1 先加載 父類 A02 1.2 再加載 B02
//(2) 創建物件
//2.1 從子類的構造器開始
new B02();//物件
}
}
class A02 { //父類
private static int n1 = getVal01();
static {
System.out.println("A02的一個靜態代碼塊..");//(2)
}
{
System.out.println("A02的第一個普通代碼塊..");//(5)
}
public int n3 = getVal02();//普通屬性的初始化
public static int getVal01() {
System.out.println("getVal01");//(1)
return 10;
}
public int getVal02() {
System.out.println("getVal02");//(6)
return 10;
}
public A02() {//構造器
//隱藏
//super()
//普通代碼和普通屬性的初始化......
System.out.println("A02的構造器");//(7)
}
}
class B02 extends A02 {
private static int n3 = getVal03();
static {
System.out.println("B02的一個靜態代碼塊..");//(4)
}
public int n5 = getVal04();
{
System.out.println("B02的第一個普通代碼塊..");//(9)
}
public static int getVal03() {
System.out.println("getVal03");//(3)
return 10;
}
public int getVal04() {
System.out.println("getVal04");//(8)
return 10;
}
public B02() {//構造器
//隱藏了
//super()
//普通代碼塊和普通屬性的初始化...
System.out.println("B02的構造器");//(10)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530545.html
標籤:其他
上一篇:使用phpstudy搭建gitee開源專案[勾股dev]
下一篇:淺談PHP設計模式的迭代器模式
