在你说这个问题已经回答了很多次之前,这是我的代码片段:
final int x;
try {
x = blah();
} catch (MyPanicException e) {
abandonEverythingAndDie();
}
System.out.println("x is " + x);
如果调用
abandonEverythingAndDie()
具有结束整个程序执行的效果(比如说因为它调用了 System.exit(int)
),那么无论何时使用 x
都会被初始化。当前的 Java 语言中是否有一种方法可以让编译器对变量初始化感到满意,通过通知它
abandonEverythingAndDie()
是一种永远不会将控制权返回给调用者的方法?我做 而不是 想要
final
关键字 x
,println
放在 try...catch
块的范围内。 最佳答案
通过向编译器提供一点额外信息来欺骗一点:
final int x;
try {
x = blah();
} catch (MyPanicException e) {
abandonEverythingAndDie();
throw new AssertionError("impossible to reach this place"); // or return;
}
System.out.println("x is " + x);
你也可以让
abandonEverythingAndDie()
返回一些东西(只是在语法上,它当然永远不会返回),然后调用 return abandonEverythingAndDie()
:final int x;
try {
x = blah();
} catch (MyPanicException e) {
return abandonEverythingAndDie();
}
System.out.println("x is " + x);
和方法:
private static <T> T abandonEverythingAndDie() {
System.exit(1);
throw new AssertionError("impossible to reach this place");
}
甚至
throw abandonEverythingAndDie();
和
private static AssertionError abandonEverythingAndDie() {
System.exit(1);
throw new AssertionError("impossible to reach this place");
}