Jvm加載順序

面試中經常遇到jvm加載的問題,自己寫了個demo記錄下

jvm在加載類的時候會先由上而下的加載static中的內容,有父類的會先加載父類中的內容。
static中的內容只加載一次
代碼塊{}中的內容會在new對象的時候執行,並且會在構造方法前執行,每次new都會執行,同樣的有父類的先執行父類的。

以上結論由下面的代碼運行結果得知,如有錯誤歡迎討論。

public class JVMLoaderBean extends SuperBean{
    public JVMLoaderBean(){
        System.out.println("constructor");
    }
    {
        System.out.println("Block 1");
    }
    static{
        System.out.println("static 1");
    }
    public static JVMLoaderBean bean=new JVMLoaderBean();

    static{
        System.out.println("static 2");
    }
    {
        System.out.println("Block 2");
    }
    public static void main(String[] args){
        System.out.println("main 1");
        JVMLoaderBean bean2=new JVMLoaderBean();

    }
}

public class SuperBean {
    {
        System.out.println("Super block");
    }
    static{
        System.out.println("Super static");
    }
    public SuperBean(){
        System.out.println("Super constructor");
    }
    public void method(){}
}

運行結果
Super static
static 1
Super block
Super constructor
Block 1
Block 2
constructor
static 2
main 1
Super block
Super constructor
Block 1
Block 2
constructor

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章