在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块。