finally构造的try-catch-finally部分中,我可以找到的每个文档都是相同的:finally块中的代码运行,无论是否发生异常,它对于放置清理代码很有用。

我的问题是...为什么?

我的意思是,这是怎么回事:

try {
    doSomething();
}
catch( e) {
    somethingFailed(e);
}
finally {
    cleanupSomething();
}

有什么比这更好的了:
try {
    doSomething();
}
catch( e) {
    somethingFailed(e);
}
cleanupSomething();

换句话说,finally与继续进行操作有何不同?

最佳答案

最后实际上是非常有用的。它绝对是一个值得拥有的工具,因为它本质上可以保护必须等待垃圾收集器管理的资源。还有其他用途,但这是其主要用途。

我们为什么要使用它呢?为什么不将处置对象放在catch语句之后(假设已捕获所有异常)?

这有一个很好的原因,那就是控制权何时离开try语句。如果发生这种情况,无论出于何种原因,最终将在控制权离开之前受到打击。因此,例如,如果返回,继续,中断,转到或异常(如果未捕获)-如果try块中发生的任何情况最终将执行,而您帖子中的代码将不会执行,因为控件已经离开。如果那是重要的资源,那它就被泄露了。

08-25 11:46
查看更多