首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 程式運行流程詳解:從類別載入到建構子執行

     編輯:Java 程式設計入門

Java 程式運行有許多「看不見」的隱式動作:

  1. 無 package 宣告時,預設歸屬「無名套件」。
  2. 自動匯入 java.lang 套件,故可直接使用 String、Math、Integer 等類別與異常類。
  3. 若類別無父類別,隱式繼承 Object,獲得其方法。
  4. 欄位初始化。

可見的運行順序

範例驗證:

public class JRun1 {
    public JRun1() { System.out.println("建構子"); }
    static { System.out.println("static{}"); }
    { System.out.println("{}"); }
    public static void main(String[] args) {
        System.out.println("main()");
    }
}

輸出:
static{}
main()

→ 先執行靜態初始化塊,再呼叫 main()。
副產品:無 main 也能運行:

public class JRun1 {
    static { System.out.println("no main()"); System.exit(0); }
}

建立非主類別物件順序

在 main 中 new JRun1(),輸出:
static{}
main()
{}
建構子

→ 靜態初始化塊 → 實例初始化塊 → 建構子。

涉及繼承時

class Father { Father(){...} static{...} {...} }
public class Child extends Father { Child(){...} static{...} {...} main(){ new Child(); } }

輸出順序:
父類別靜態塊 → 子類別靜態塊 → 父類別實例塊 → 父類別建構子 → 子類別實例塊 → 子類別建構子。
注意:實例塊與建構子緊接運行,父子不交替。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved