如果我运行以下代码:
try{
return false;
} catch(Exception e){
e.printStackTrace();
}
finally{
return true;
}
为什么会返回 true ?
答案 0 :(得分:4)
来自Java Language Specification section 14.20.2
(我的斜体)。 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块。