ank*_*kur 1 java exception-handling try-catch
public class Test2 {
public static void main(String args[]) {
System.out.println(method());
}
public static int method() {
try {
throw new Exception();
return 1;
} catch (Exception e) {
return 2;
} finally {
return 3;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这个问题中try块有return语句并抛出异常...它的输出是COMPILER ERROR ....
我们知道finally块会覆盖try/catch块中的return或exception语句...但是这个问题在try块中都有...为什么输出是错误的?
Boz*_*zho 14
因为您的return语句无法访问 - 执行流程永远无法到达该行.
如果throw语句在if-clause中,那么return可能会到达并且错误将消失.但在这种情况下,拥有它是没有意义的return.
另一个重要的注意事项 - 避免从finally条款返回.例如,Eclipse编译器在finally子句中显示有关return语句的警告.
编译器异常来自,就像我的Eclipse老兄说的那样
Unreachable code Test2.java line 11 Java Problem
Run Code Online (Sandbox Code Playgroud)
永远不会达到主代码块的return语句,因为之前会抛出异常.
Alos注意到你的finally块的return语句至少是一个设计缺陷,就像Eclipse再次说的那样
finally block does not complete normally Test2.javajava line 14 Java Problem
Run Code Online (Sandbox Code Playgroud)
实际上,因为finally块只是在这里提供一些干净的关闭,所以不希望返回会覆盖通常由方法返回的结果的东西.