在finally
构造的try-catch-finally
部分中,我可以找到的每个文档都是相同的:finally
块中的代码运行,无论是否发生异常,它对于放置清理代码很有用。
我的问题是...为什么?
我的意思是,这是怎么回事:
try {
doSomething();
}
catch( e) {
somethingFailed(e);
}
finally {
cleanupSomething();
}
有什么比这更好的了:
try {
doSomething();
}
catch( e) {
somethingFailed(e);
}
cleanupSomething();
换句话说,
finally
与继续进行操作有何不同? 最佳答案
最后实际上是非常有用的。它绝对是一个值得拥有的工具,因为它本质上可以保护必须等待垃圾收集器管理的资源。还有其他用途,但这是其主要用途。
我们为什么要使用它呢?为什么不将处置对象放在catch语句之后(假设已捕获所有异常)?
这有一个很好的原因,那就是控制权何时离开try语句。如果发生这种情况,无论出于何种原因,最终将在控制权离开之前受到打击。因此,例如,如果返回,继续,中断,转到或异常(如果未捕获)-如果try块中发生的任何情况最终将执行,而您帖子中的代码将不会执行,因为控件已经离开。如果那是重要的资源,那它就被泄露了。