【发布时间】:2018-03-06 20:29:51
【问题描述】:
public class Test {
private static final int A;
static {
A = 5;
}
}
这种初始化静态最终变量 A 的方式可以正常工作。
public class Test {
private static final int A;
static {
Test.A = 5;
}
}
这种方式会产生编译错误“无法为最终变量'A'赋值。
为什么?
【问题讨论】:
-
不确定,但可能是因为要执行 Test.A = 5,您需要一个 Test 实例。并且实例创建后不能赋值。
-
@AlperAkture:不,这不需要
Test的实例。 -
这是静态的要点,不涉及实例。
-
我不会那么介意。像这样的代码非常罕见,你真的不需要它。我确信这是一些技术问题,并且与 JLS 定义事物的确切方式有关,可能与何时执行
static块以及何时可以使用Test.A进行引用有关。尽管如此,有趣的地方,我也很想知道详细的答案。
标签: java