initilizer block,初始化區塊
物件初始化區塊
說明:
物件初始化區塊會在constructor前執行,若有繼承父類別則執行順序為:
父類別物件初始區塊->父類別constructor->該物件初始區塊->該物件constructor
使用時機:
實體變數無法直接完成初始化,例如:需要在初始化的list添加element
public class main extends father{
private List<Integer> list;
{
list = new ArrayList<>();
list.add(1);
list.add(2);
System.out.println("child init");
}
public main() {
System.out.println("child constructor init");
}
public static void main(String[] args) {
main m = new main();
}
}
class father {
{
System.out.println("father init");
}
public father() {
System.out.println("father constructor init");
}
}
//----console output----//
//father init
//father constructor init
//child init
//child constructor init
靜態初始區塊
概念同上,不同的是static變數為類別載入後就存在,被宣告為static的變數不會讓個別物件擁有,而是屬於類別。
存取靜態方法的習慣以類別名稱存取靜態成員例如:Ball.PI,範例如下
public class Ball {
public static final double PI=3.14;
static{
System.out.println("static init");
}
public static void main(String[] args) {
}
}
//---console---//
//static init
Reference:
- openhome cc static 類別成員
- MagicLen Java 靜態初始化區塊