Amm*_*mmu 67 java try-catch-finally
请参阅以下代码并解释输出行为.
public class MyFinalTest {
public int doMethod(){
try{
throw new Exception();
}
catch(Exception ex){
return 5;
}
finally{
return 10;
}
}
public static void main(String[] args) {
MyFinalTest testEx = new MyFinalTest();
int rVal = testEx.doMethod();
System.out.println("The return Val : "+rVal);
}
}
Run Code Online (Sandbox Code Playgroud)
结果是返回Val:10.
Eclipse显示警告:finally block does not complete normally.
catch块中的return语句会发生什么?
Boz*_*zho 73
它被一个覆盖finally,因为它finally是在其他一切之后执行的.
这就是为什么,一个经验法则 - 永远不会回来finally.例如,Eclipse显示了该片段的警告:"finally块无法正常完成"
Vla*_*nov 51
finally总是被执行(唯一的例外System.exit()).你可以这样想到这种行为:
小智 5
finally 块总是被执行,除非 System.exit() 语句是 finally 块中的第一个语句。
所以在上面的例子中 Exection 被 try 语句抛出并在 catch 块中捕获。有一个值为5 的return 语句,因此在堆栈调用中,值5稍后在执行 finally 块时添加,最新的返回值在返回值时添加到堆栈顶部,堆栈根据堆栈行为“LAST IN FIRST OUT”返回最新值,所以它将返回值为10。