1. 程式人生 > >類的初始化和物件的初始化

類的初始化和物件的初始化

類的初始化格式:static{<--系列語句>}

當java程式執行時,需要某個類,但該類還沒有裝入記憶體,則java將類裝入記憶體,然後立即執行類中定義的類初始化塊,執行次序就是類初始化塊定義的次序。

public class Test{

  static {System.out.println("Hello");}

}

程式執行的結果如下:

Hello

Exception in thread "main"java.lang.NoSuchMethosError:main

物件的初始化格式:{<--系列語句>}

當java程式執行時,需要某個類,但該類還沒有裝入記憶體,則java將類裝入記憶體,然後立即執行類中定義的類初始化塊,執行次序就是類初始化塊定義的次序,然後執行物件初始化塊,執行次序是定義的次序,最後執行類的建構函式,繼續對物件進行初始化。

class A{
 public A(){System.out.println("A的建構函式");}
 {System.out.println("A的動態初始化塊");}
 static {System.out.println("A的靜態初始化塊");}
}

class B extends A{
 public B(){System.out.println("B的建構函式");}
 {System.out.println("B的動態初始化塊");}
 static {System.out.println("B的靜態初始化塊");}
}

public class Test4{
 public static void main(String[] args){
  System.out.println("第一次生成類B的物件時輸出:");
  new B();
  System.out.println("第二次生成類B的物件時輸出:");
  new B();
 }
}

程式執行結果如下:

第一次生成類B的物件時輸出:
A的靜態初始化塊
B的靜態初始化塊
A的動態初始化塊
A的建構函式
B的動態初始化塊
B的建構函式
第二次生成類B的物件時輸出:
A的動態初始化塊
A的建構函式
B的動態初始化塊
B的建構函式