1. 程式人生 > >JVM加載class文件的順序

JVM加載class文件的順序

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 ab 
= new B(); ab = new B(); } }
View Code

執行結果:1a2b2b。創建對象時構造器的調用順序是:先初始化靜態成員,然後調用父類構造器,再初始化非靜態成員,最後調用自身構造器。

JVM加載class文件的順序