问题
我看到了一些这样的代码:
try
{
db.store(mydata);
}
finally
{
db.cleanup();
}
我以为try
应该有acatch
?
为什么这段代码会这样做?
#1 热门回答(142 赞)
如果你希望当前正在执行的方法仍然抛出异常,同时允许适当地清理资源,这将非常有用。下面是从调用方法处理异常的具体示例。
public void yourOtherMethod() {
try {
yourMethod();
} catch (YourException ex) {
// handle exception
}
}
public void yourMethod() throws YourException {
try {
db.store(mydata);
} finally {
db.cleanup();
}
}
#2 热门回答(64 赞)
它就在那里因为程序员想要确保即使try块内的代码抛出异常也会调用db.cleanup()
。该块不会处理任何异常,但它们只会在执行finally块后向上传播。
#3 热门回答(19 赞)
为什么这段代码会这样做?
因为显然代码不知道如何在这个级别处理异常.这很好-只要其中一个调用者这样做,即只要异常最终在某处处理。
通常,低级代码无法对异常做出适当的反应,因为需要通知用户,或者必须记录异常,或者必须尝试其他策略。低级代码仅执行功能,并且不了解更高级别的决策。
但是代码仍然需要清理它的资源(因为如果它没有,它们会泄漏),所以它确实只是在53342020clause中,确保它始终存在,无论是否抛出异常。