13

我正在学习面向对象编程的测试,我想知道是否有任何情况下考虑以下代码:

try {
    do something
} catch (someException e) {

} finally {
    do something
}

finally块不会执行?

4

4 回答 4

17

是的。如果你使 Java VM 崩溃或通过本机代码搞砸了,导致程序终止,或在try块内无限循环/等待。

这些是唯一可以避免执行该finally块的三种情况。

于 2010-08-14T17:22:54.230 回答
5

如果你调用System.exit(0). try或者做一些使 JVM 退出或挂起的事情(比如死锁)。否则 - 不。

于 2010-08-14T17:23:01.107 回答
2

Java 语言规范保证在 try 语句完成之前调用 finally。

由于 Borealid 的回答中已列举的常见原因,try 语句可能无法完成。

于 2010-08-14T22:36:19.490 回答
0

如果控制从 try 或 catch 块中出来,finally 块肯定会被执行。如果你有一些如何设法阻止控制从这些块中出来:

  • 通过编写退出语句,或

  • 无限循环等

那么finally块将不会被执行。通常我们写 finally 块是为了“清理”的目的。

于 2015-08-02T18:55:32.703 回答