小编kev*_*rch的帖子

java中的静态块如何工作?

据我所知,静态字段和块是在类中从上到下处理的。我的意思是,必须先声明一个字段(静态字段),然后才能在静态块中使用它。必须首先声明静态字段,然后使用静态块修改该静态字段。正确的?

像这样:

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分配一个新对象,但如果我在地图上放置一些东西,它就无法编译。

请给我一个合理的答案。

java static-methods

1
推荐指数
1
解决办法
97
查看次数

标签 统计

java ×1

static-methods ×1