Java try-catch- finally块

时间:2013-06-26 14:55:59

标签: java try-catch

如果我运行以下代码:

try{
   return false;
} catch(Exception e){
       e.printStackTrace();
}
finally{
   return true;
}

为什么会返回 true

5 个答案:

答案 0 :(得分:4)

来自Java Language Specification section 14.20.2

  • 如果try块的执行由于任何其他原因R突然完成,则执行finally块,然后有一个选择:
    • 如果finally块正常完成,则try语句突然完成,原因为R.
    • 如果finally块因为S而突然完成,那么<​​em> try语句突然完成原因S(并且原因R被丢弃)。

(我的斜体)。 return是一种“突然完成”,换句话说return中的finally会否决try内的{{1}}。

答案 1 :(得分:1)

它返回true,因为每当finally块突然完成时,无论是return - 还是通过抛出异常,该完成都会取代任何先前的返回值或异常。 (见§14.20.2 "Execution of try-finally and try-catch-finally" in the Java Language Specification, Java SE 7 Edition。)

答案 2 :(得分:1)

因为无论try catch部分发生了什么,finally块总是会按照你的要求执行,所以在这种情况下它返回true。只需删除finally语句,它就会返回false。

答案 3 :(得分:0)

当try或catch块通过调用System.exit函数终止时,最后块不会执行。类似地,如果线程执行try catch在执行try或catch块时死亡,则finally块可能不会执行。

因此,即使你的try块返回false,你的try catch finally块也可能几乎总是返回true。

答案 4 :(得分:-1)

因为如果遇到返回,将始终执行finally块。