他们不同,如果
- 在
try
-块完成了由投掷java.lang.Throwable
不是一个java.lang.Exception
,例如,因为它是一个java.lang.Error
如AssertionError
或OutOfMemoryError
。 - 在try块突然结束使用流程控制语句这样的
continue
,break
或return
- catch块突然完成(通过抛出任何throwable或使用控制流语句)
更一般而言,Java语言保证在try语句完成之前执行finally块。(请注意,如果try语句未完成,则无法保证finally。语句可能由于各种原因而未完成,包括硬件关闭,操作系统关闭,VM关闭(例如由于导致
System.exit),线程等待(
Thread.suspend(),
synchronized,
Object.wait(),
Thread.sleep())或以其他方式被忙碌(无端环,,,,)。
因此,
finally与方法主体的末尾相比,块是执行清除操作的更好的位置,但其本身仍不能保证清除执行。



