【发布时间】:2015-02-14 20:21:18
【问题描述】:
例如,考虑下面的代码快照:
public static final int a;
public static final int b;
static {
a = 8; // it's working
Test.b = 10; // compilation error Test.b cannot be assigned.
}
为什么我们不能在Test 类本身的静态块中使用Test.b = 10;?如果没有类名,它可以正常工作。
这背后有什么原因吗?
【问题讨论】:
-
因为在静态初始化器中时您的类尚未初始化?也可能是因为 JLS 禁止它......
-
您是否对“JLS 的哪一部分禁止这样做”或“为什么要这样设计语言”感兴趣?
-
这里可能是错误的,但可能是因为您将
Test.b声明为final -
@JSKNS:除了那个赋值之外,你现在在哪里看到它被初始化?如果您删除
Test.部分,您会如何看待这种变化? -
您是否正在寻找一顶秘密的 Winter Bash 帽子来累积已删除的问题答案...?
标签: java static final static-block