【发布时间】:2014-06-20 17:36:00
【问题描述】:
以下示例类无法编译:
class Test {
final int x; // Compilation error: requires initialization.
}
这段代码的编译错误信息是:
..\src\pkgs\main\Test.java:3: error: variable x might not have been initialized
class Test {
^
但是,Java 不会为包含以下方法的类生成任何错误消息:
class Test {
void method() {
final int x; // Compiles OK; has no initialization.
}
}
关于初始化及其要求,为什么 Java 对待 final 实例变量和 final 局部变量的方式不同?谢谢。
【问题讨论】:
-
为什么很难知道。一个可能的论点:最终变量必须在使用之前进行初始化——如果不使用,则不需要初始化。 final 字段必须在构造函数的末尾进行初始化——此时对象及其所有字段都可供任何人使用,编译器不必费劲地判断它是否可能被访问.
标签: java initialization final