一文整懂 Java 中靜態(tài)代碼塊 / 初始塊 / 構造方法的執(zhí)行順序

一文整懂 Java 中靜態(tài)代碼塊 / 初始塊 / 構造方法的執(zhí)行順序

相信,刷過面試題應該都碰到過很多題,關于類繼承后 Java 中靜態(tài)代碼塊 / 初始塊 / 構造方法的執(zhí)行順序問題,每每記一下又忘了,那么,今天來用不多的時間復習一下

01.靜態(tài)代碼塊 / 初始塊 / 構造方法的執(zhí)行順序

package erdan.demo;
public class Demo {
    static {
        System.out.println("靜態(tài)代碼塊 111");
    }
    static {
        System.out.println("靜態(tài)代碼塊 222");
    }
    {
        System.out.println("初始塊 111");
    }
    {
        System.out.println("初始塊 222");
    }
    public Demo() {
        System.out.println("無參構造方法");
    }
    public Demo(int i) {
        System.out.println("有參構造方法" + i);
    }
    public static void main(String[] args) {
        new Demo();
    }
}

輸出:

靜態(tài)代碼塊 111
靜態(tài)代碼塊 222
初始塊 111
初始塊 222
無參構造方法

上圖:

image

筆記:初始塊(非靜態(tài)代碼塊)總是和構造方法是一家子,會一塊出現(xiàn)

02.測試繼承之后的執(zhí)行順序

package erdan.demo;
public class ChildrenDemo extends Demo{
    static {
        System.out.println("ChildrenDemo:靜態(tài)代碼塊 111");
    }
    static {
        System.out.println("ChildrenDemo:靜態(tài)代碼塊 222");
    }
    {
        System.out.println("ChildrenDemo 初始塊 111");
    }
    {
        System.out.println("ChildrenDemo 初始塊 222");
    }
    public ChildrenDemo() {
        System.out.println("無參構造方法 ChildrenDemo");
    }
    public ChildrenDemo(int i) {
        System.out.println("有參構造方法 ChildrenDemo:" + i);
    }
    public static void main(String[] args) {
        new ChildrenDemo();
        System.out.println("---------------------------------");
        new ChildrenDemo(1);
    }
}

輸出:

靜態(tài)代碼塊 111
靜態(tài)代碼塊 222
ChildrenDemo:靜態(tài)代碼塊 111
ChildrenDemo:靜態(tài)代碼塊 222
初始塊 111
初始塊 222
無參構造方法
ChildrenDemo 初始塊 111
ChildrenDemo 初始塊 222
無參構造方法 ChildrenDemo
---------------------------------
初始塊 111
初始塊 222
無參構造方法
ChildrenDemo 初始塊 111
ChildrenDemo 初始塊 222
有參構造方法 ChildrenDemo:1

可以看到下面除了調用有參無參的差別外,虛線下比上面少了靜態(tài)代碼塊

ps:

  • 類比子類先執(zhí)行

  • 態(tài)代碼塊只會輸出一次,初始塊與構造方法是一家子,輸出在一塊,初始塊會在構造前初始化

03.總結

  1. 父類比子類先行執(zhí)行

  2. 靜態(tài)代碼塊,在類第一次加載的時候,會初始化一次,適合項目中初始化全局參數(shù),常量等

  3. 初始塊與構造方法是一家子,但是初始塊會在構造函數(shù)前執(zhí)行,初始塊適合重載構造函數(shù)存在相同代碼,可以抽出來使用

公眾號
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容