据我所知,静态字段和块是在类中从上到下处理的。我的意思是,必须先声明一个字段(静态字段),然后才能在静态块中使用它。必须首先声明静态字段,然后使用静态块修改该静态字段。正确的?
像这样:
private static Map<String, Object> map = new HashMap<>();
static {
map.put("key", "value");
}
Run Code Online (Sandbox Code Playgroud)
它可以编译。如果我们像这样颠倒顺序:
static {
map.put("key", "value");
}
private static Map<String, Object> map = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
它无法按预期编译。
但是,如果我这样写。
static {
map = new HashMap<>();
}
private static Map<String, Object> map;
Run Code Online (Sandbox Code Playgroud)
就顺利通过了?!有人知道发生了什么事吗?它不介意我是否为map分配一个新对象,但如果我在地图上放置一些东西,它就无法编译。
请给我一个合理的答案。