【发布时间】:2014-10-23 11:40:31
【问题描述】:
首先,这个问题与这些好问题有前向关系:
1) Use of uninitialized final field - with/without 'this.' qualifier
2) Why isn't a qualified static final variable allowed in a static initialization block?
但我会从另一个角度问它。请记住:上面提到的问题是关于使用Java 7 中的关键字this 访问final 字段的问题。
在我的问题中有类似的东西,但不一样。好吧,考虑下面的代码:
public class TestInit {
final int a;
{
// System.out.println(a); -- compile error
System.out.println(getA());
// a = a; -- compile error
a = getA();
System.out.println(getA());
}
private int getA() {
return a;
}
public static void main(String[] args) {
new TestInit();
}
}
输出是:
0
0
正如你所看到的,这里有两个不清楚的地方:
- 还有另一种合法的方式来访问未初始化的
final字段:使用它的getter。 - 我们是否应该将
a = getA();的分配视为空白最终字段的合法,并且它总是会根据JLS为非final字段分配其默认值?换句话说,它应该被视为预期的行为吗?
【问题讨论】:
-
您链接的问题具有 JLS 规定的规则。他们没有说任何关于调用方法的内容,所以这些都是允许的。
标签: java compiler-errors