Jon*_*oni 16
当然,静态最终变量被赋予默认值,例如参见:
class Test {
static final int x;
static {
printX();
x = 42;
printX();
}
static void printX() {
System.out.println("Here x is "+x);
}
public static void main(String[] args) { }
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Here x is 0
Here x is 42
Run Code Online (Sandbox Code Playgroud)
如果x没有给出JLS 4.12.5中0指定的默认值,则输出将取决于所使用的JVM.您可能会看到一些随机数.
更新:现在我们已经证明静态最终字段确实获得了默认值,您可能想知道为什么默认值不够.除了显而易见的问题之外,这个问题没有一个好的答案:"规范是如此".摘录自8.3.1.2:
如果空白的final(§4.12.4)类变量未被声明它的类的静态初始化程序(第8.7节)明确赋值(第16.8节),则为编译时错误.
我们只能猜测这种限制背后的动机,但我认为这是为了让程序更容易理解.如果要将变量设置为0,则可以更明确地执行此操作.
| 归档时间: |
|
| 查看次数: |
1863 次 |
| 最近记录: |