java成員變數,靜態成員變數,靜態程式碼塊,程式碼塊和建構函式等載入順序
阿新 • • 發佈:2019-01-30
直接上例子
父類:
子類:/** * DESC: 父類 <br/> * USER: haiboz <br/> * DATE: 2018/1/29 17:01 <br/> */ public class Parent { private static String strParSta = "父類靜態成員變數"; private String strParIns = "父類成員變數"; static{ System.out.println("進入父類靜態塊"); System.out.println("strPar:"+strParSta); } public Parent(){ System.out.println("進入父類建構函式"); System.out.println("父類建構函式 strPar:"+strParSta); System.out.println("父類建構函式 strParIns:"+strParIns); } { System.out.println("進入父類程式碼塊"); System.out.println("父類程式碼塊 strParIns:"+strParIns); } public void sout(){ System.out.println("輸出"); } }
執行輸出結果:/** * DESC: 子類 <br/> * USER: haiboz <br/> * DATE: 2018/1/29 17:09 <br/> */ public class Son extends Parent { static String strSon = "子類靜態成員變數"; String strSonIns = "子類成員變數"; public Son() { System.out.println("進入子類建構函式"); System.out.println("子類建構函式 strSon:"+strSon); System.out.println("子類建構函式 strSonIns:"+strSonIns); } static { System.out.println("進入子類靜態程式碼塊"); System.out.println("子類靜態程式碼塊 strSon:"+strSon); } { System.out.println("進入子類程式碼塊"); System.out.println("子類程式碼塊 strSonIns:"+strSonIns); } public static void main(String[] args) { Parent son = new Son(); son.sout(); } }
進入父類靜態塊
strPar:父類靜態成員變數
進入子類靜態程式碼塊
子類靜態程式碼塊 strSon:子類靜態成員變數
進入父類程式碼塊
父類程式碼塊 strParIns:父類成員變數
進入父類建構函式
父類建構函式 strPar:父類靜態成員變數
父類建構函式 strParIns:父類成員變數
進入子類程式碼塊
子類程式碼塊 strSonIns:子類成員變數
進入子類建構函式
子類建構函式 strSon:子類靜態成員變數
子類建構函式 strSonIns:子類成員變數
輸出
總結載入順序如下:
1.進入父類靜態程式碼塊
2.進入子類靜態程式碼塊
3.進入父類程式碼塊
4.進入父類建構函式
5.進入子類程式碼塊
6.進入子類建構函式
7.進入普通函式
其中步驟1-2為類載入過程,步驟3-6為物件例項化的過程。
注:如果類已經被載入:
則靜態程式碼塊和靜態變數就不用重複執行,再建立類物件時,只執行與例項相關的變數初始化和構造方法。