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