2012/11/09

[java] static block

欲對 static 變數初始化,可以怎麼作?
若是 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

沒有留言:

張貼留言