java为什么静态初始化块中不允许使用限定的静态final变量?
案例1
class Program {
static final int var;
static {
Program.var = 8; // Compilation error
}
public static void main(String[] args) {
int i;
i = Program.var;
System.out.println(Program.var);
}
}
案例2
class Program {
static final int var;
static {
var = 8; //OK
}
public static void main(String[] args) {
System.out.println(Program.var);
}
}
为什么案例1会导致编译错误
# 1 楼答案
JLS持有答案(请注意粗体声明):
这意味着在分配静态最终变量时必须使用“简单名称”——即不带任何限定符的变量名称
# 2 楼答案
显然,这是一种廉价的语法技巧,用于限制类本身中的确定(非)赋值分析
如果字段在语法上用类名限定,则代码在另一个类中通常为,而分析无法到达该类
在你的例子中,这个技巧失败了。其他奇怪的例子:
如果他们有更多的资源,他们可能会制定更好的规则。但我们现在不能改变规格