在try块结束后总是运行finally块,无论是由于异常,er,throwable导致正常结束还是异常结束。
如果try块中的任何代码抛出异常,则当前方法只是重新抛出(或继续抛出)相同的异常(在运行finally块之后)。
如果finally块抛出异常/错误/ throwable,并且已经存在挂起的throwable,则会变得很难看。 坦率地说,我完全忘记了发生了什么(多年前我的认证)。 我认为两个扔掉的东西都是连在一起的,但是你需要做一些特别的伏都教(即 - 我必须要查找一个方法调用)才能在"最终"之前得到原始问题。 barfed,呃,吐了。
顺便说一句,try / finally对资源管理来说是很常见的事情,因为java没有析构函数。
例如。 -
r = new LeakyThing();
try { useResource( r); }
finally { r.release(); } // close, destroy, etc
"最后",还有一个提示:如果你懒得放入一个捕获,要么捕获特定的(预期的)可抛出的子类,要么只捕获" Throwable",而不是" Exception& #34;,用于一般的全部错误陷阱。 太多的问题,比如反思蠢事,抛出错误"而不是"异常",那些问题会被任何"赶上所有" 编码为:
catch ( Exception e) ... // doesn't really catch *all*, eh?
改为:
catch ( Throwable t) ...