看看这个简单的 Java 代码:
class A {
public static void main(String[] args) {
final int x;
try {
throw new RuntimeException();
x = 1;
} finally {}
x = 2;
System.out.println("x: " + x);
}
}
我希望它打印“x:2”。
A.java:6: unreachable statement
x = 1;
^
A.java:8: variable x might already have been assigned
x = 2;
^
2 errors
它说它不会编译,因为在第 8 行,x = 2
可能会重新分配最终变量,但这是错误的,因为如上所述,该行x = 1
无法访问,因此它将第一次分配它,而不是重新分配。
为什么编译器在知道尚未分配时会给出错误说明“x 可能已被分配” x
?