Java 物件初始化區塊

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: