java 中 finally 语句块的 深度解析 总结

利用了一小段时间看完了这篇写的还是可以的 但是发现竟然写错了一个地方 这个接下来就会提到


一、博主首先给大家一个问题:finally在程序中一定会执行吗?

答案:否,只有与 finally 对应的 try 语句块得到执行的情况下,finally 语句块才会执行。

二、博主又问如果对应的 try 语句块得到执行了,finally 语句块一定会执行吗?

答案:依然否,在try 语句块执行的过程中如果调用终止虚拟机的指令,依然无法得到执行,甚至在线程执行 try 或者 catch 语句块的时候突然死机或者断电,finally 语句块肯定无法执行。

三、 博主不在发问了,在引经据典之后,直接给出了问题的答案!

结论:不管 try 语句块正常结束还是异常结束,finally语句块是保证要执行的。如果try语句块正常结束,那么在try语句块中的语句都执行完了之后,再执行 finally 语句块。如果 try 语句块中有控制转义语句(throw return break continue),那 finally 语句块会在 try 或者 catch 语句块之前执行,但是这条准则只适用于 throw return 的情况,不适用于break和continue语句,因为他们根本没有返回值。

四、指出其中的一个小毛病!!!

毛病之处:在于清单6的运行结果!不是1,而是2;原理是对的,结果博主不知道怎么搞的,弄错了,还是很有收获的!

总结:想不到一个小小的finally竟然暗藏玄机,看来java功力还要好好练练呐!!! 

原文地址:https://www.cnblogs.com/Knuth/p/2383853.html