在try \ finally块中是否存在这样的情况,finally将不会被执行?
我正在攻读面向对象编程的测试,我想知道是否有任何案例,考虑以下代码:
try { do something } catch (someException e) { } finally { do something }
finally
块不会执行?
是。 如果您通过本机代码崩溃Java VM或以其他方式解决问题,导致程序终止,或在try
块内无限循环/等待。
这是避免执行finally
块的唯一三种情况。
如果在try
调用System.exit(0)
。 或者制作使JVM退出或挂起的东西(如死锁)。 否则 – 不。
Java语言规范保证在try语句完成之前最终调用。
try语句可能无法完成,因为通常的原因已在Borealid的答案中列举。
如果控件来自try或catch块,则finally块肯定会被执行。 如果你有一些如何设法阻止控制从这些块出来:
-
通过写出口声明,或
-
无限循环等
然后finally块将不会被执行。 通常我们为“ 清理 ”目的编写finally块。