若是 static 變數間有相依性,無法在初次宣告時就給予設定,那該怎麼辦? 答案就是宣告 static 區塊,該區塊的程式碼只會執行一次。在下面的程式碼,b 是在第一次使用時作生成實體,而 a 是在載入 class 時,利用 static block 來生成實體。
public class StaticExample {
private static List<String> a;
private static List<String> b;
static {
a = new ArrayList<>();
a.add("A");
System.out.println("List a");
}
public static String firstElmtOfA() { return aList.get(0); }
public static String firstElmtOfB() {
if(b == null) {
b = new ArrayList<>();
b.add("B");
System.out.println("List b");
}
return bList.get(0);
}
public static void main(String[] args) {
StaticExample.firstElmtOfB();
StaticExample.firstElmtOfA();
}
}
上述 main 方法中,即使是 firstElmtOfB 先執行,因為 static block 的關係,依然是 a 先生成,所以會先輸出 List a,執行結果如下。List a
List b
沒有留言:
張貼留言