- java雙括號的初始化確實很方便,特別是在常量文件中,無可替代。但是這樣初始化的map,如果在調用的時候沒有實例化java8Base對象,那么就算代碼塊中新增了數據,也是無法訪問到新增數據的。
public class Java8Base implements Serializable {
{
USERMAP.put("TEST","測試");
System.out.println("靜態代碼快");
}
public static final String USER_NOT = "404";
public static Map<String,String> USERMAP = new HashMap<String, String>(){{
System.out.println("--usremap-");
put(USER_NOT,"用戶不存在");
}};
//執行順序 --usremap- ,再是 靜態代碼快
}
public class TestMain {
public static void main(String[] args) {
String a = USERMAP.get("404");
System.out.println(a);
//404的值是用戶不存在
String b = USERMAP.get("TEST");
//Java8Base java8Base = new Java8Base();
System.out.println(b);
//注釋調 TEST 的值是 nulll,直接Java8Base.USERMAP 訪問TEST 的值也是null
//實例化后才能訪問值
}
}