Java 程式運行有許多「看不見」的隱式動作:
package 宣告時,預設歸屬「無名套件」。java.lang 套件,故可直接使用 String、Math、Integer 等類別與異常類。Object,獲得其方法。範例驗證:
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(); } }
輸出順序:
父類別靜態塊 → 子類別靜態塊 → 父類別實例塊 → 父類別建構子 → 子類別實例塊 → 子類別建構子。
注意:實例塊與建構子緊接運行,父子不交替。