Java中靜態代碼塊、構造代碼塊、構造函數和普通代碼塊

遇事不決,就百度,哈哈哈。

找到了一篇還不錯的文章 傳送門在此

詳情請傳送查看,重點內容如下:

1、執行順序

靜態代碼塊>構造代碼塊>構造函數>普通代碼塊

public class CodeBlock {
    static{
        System.out.println("靜態代碼塊");
    }
    {
        System.out.println("構造代碼塊");
    }
    public CodeBlock(){
        System.out.println("無參構造函數");
    }
     
    public void sayHello(){
        {
            System.out.println("普通代碼塊");
        }
    }
     
    public static void main(String[] args) {
        System.out.println("執行了main方法");
         
        new CodeBlock().sayHello();;
        System.out.println("---------------");
        new CodeBlock().sayHello();;
    }
}

反編譯生成的class文件:

執行結果:

2、父類和子類的執行順序 

在這裏我們創建了兩個匿名對象,但是靜態代碼塊只是調用了一次。

對象的初始化順序:

  首先執行父類靜態的內容,父類靜態的內容執行完畢後,接着去執行子類的靜態的內容,當子類的靜態內容執行完畢之後,再去看父類有沒有構造代碼塊,如果有就執行父類的構造代碼塊,父類的構造代碼塊執行完畢,接着執行父類的構造方法;父類的構造方法執行完畢之後,它接着去看子類有沒有構造代碼塊,如果有就執行子類的構造代碼塊。子類的構造代碼塊執行完畢再去執行子類的構造方法。

  總之一句話,靜態代碼塊內容先執行,接着執行父類構造代碼塊和構造方法,然後執行子類構造代碼塊和構造方法。

 父類:SuperClass.java

 子類:SubClass.java

打印結果:

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