【发布时间】:2015-12-28 20:04:08
【问题描述】:
A 类包含:
- 静态
Strings - 一个静态
Map填充在类的静态 阻止 - 一个静态方法,比如
getStr(),它返回一个从静态构建的StringStrings
B 类包含:
- 静态
Map - 使用
A.getStr()填充Map的静态块
B 的静态块总是会成功填充其地图吗?我假设JVM能够处理这个。加载类时静态块的执行顺序是否有任何问题,这反过来又不能保证B 正确填充地图?我想确定一下,也许了解这背后的机制。
【问题讨论】:
-
为什么不能成功填充?更重要的是,为什么只有有时?
-
如果初始化中存在循环依赖,可能无法成功填充。
-
@mastov - 如果是这样,那么是否不能保证 B 将始终成功填充?
-
哪里有循环依赖?我看到 B 依赖于 A,但不是相反,除非您的意思是说 A 的 Map 依赖于 B 的静态块(如果是,可以使用一些说明)。
-
这里没有足够的信息来验证不存在循环依赖:我们没有类的实现及其所有依赖。所以,谨慎的回应是:不,它不会总是成功填充;它们可能不是这样的一个原因是周期性依赖。
标签: java static jvm static-methods static-block