我正在学习面向对象编程的测试,我想知道是否有任何情况下考虑以下代码:
try {
do something
} catch (someException e) {
} finally {
do something
}
该finally
块不会执行?
我正在学习面向对象编程的测试,我想知道是否有任何情况下考虑以下代码:
try {
do something
} catch (someException e) {
} finally {
do something
}
该finally
块不会执行?
是的。如果你使 Java VM 崩溃或通过本机代码搞砸了,导致程序终止,或在try
块内无限循环/等待。
这些是唯一可以避免执行该finally
块的三种情况。
如果你调用System.exit(0)
. try
或者做一些使 JVM 退出或挂起的事情(比如死锁)。否则 - 不。
Java 语言规范保证在 try 语句完成之前调用 finally。
由于 Borealid 的回答中已列举的常见原因,try 语句可能无法完成。
如果控制从 try 或 catch 块中出来,finally 块肯定会被执行。如果你有一些如何设法阻止控制从这些块中出来:
通过编写退出语句,或
无限循环等
那么finally块将不会被执行。通常我们写 finally 块是为了“清理”的目的。