本文首先給個例子來探討下什麼是實例變數初始化器,什麼是實例初始化器,以及什麼是靜態初始化器。然後看看實例初始化器是怎麼運作的。
1. 執行的順序
先看看下面這段程式碼,你覺著哪部分會先被執行呢?
public class Foo { //instance variable initializer 实例变量初始化器 String s = "abc"; //constructor 构造函数 public Foo() { System.out.println("constructor called"); } //static initializer 静态初始化器 static { System.out.println("static initializer called"); } //instance initializer 实例变量初始化器 { System.out.println("instance initializer called"); } public static void main(String[] args) { new Foo(); new Foo(); } }
輸出如下:
static initializer called instance initializer called constructor called instance initializer called constructor called
2. Java的實例初始化器是如何運作的?
上面的範例中的實例初始化器包含一段列印字元的程式碼。要理解它是如何運作的,我們可以把它想像成變數賦值的過程,這樣就不難理解了。
除了這麼賦值:
int b = 0;
還可以這麼寫:
int b; b = 0;
因此,實例初始化器和實例變數初始化器就大同小異了。
3. 什麼時候會用到實例初始化器?
能用到實力初始化器的時候比較少。但有些時候還是一個實例變數初始化器的替代選擇,例如:
初始化程式碼必須處理異常情況
執行一個實例變數沒辦法進行的計算