JVM加載class文件的順序
阿新 • • 發佈:2018-03-12
system 技術分享 執行 直接 初始 變量 構造器 class sta
http://blog.csdn.net/jackfrued/article/details/44921941第21題
類的加載是指把類的.class文件中的數據讀入到內存中,通常是創建一個字節數組讀入.class文件,然後產生與所加載類對應的Class對象。加載完成後,Class對象還不完整,所以此時的類還不可用。當類被加載後就進入連接階段,這一階段包括驗證、準備(為靜態變量分配內存並設置默認的初始值)和解析(將符號引用替換為直接引用)三個步驟。最後JVM對類進行初始化,包括:
1)如果類存在直接的父類並且這個類還沒有被初始化,那麽就先初始化父類;
2)如果類中存在初始化語句,就依次執行這些初始化語句。
class A { static { System.out.print("1"); } public A() { System.out.print("2"); } } class B extends A{ static { System.out.print("a"); } public B() { System.out.print("b"); } } public class Hello { public static void main(String[] args) { A abView Code= new B(); ab = new B(); } }
執行結果:1a2b2b。創建對象時構造器的調用順序是:先初始化靜態成員,然後調用父類構造器,再初始化非靜態成員,最後調用自身構造器。
JVM加載class文件的順序