我看到了一些这样的代码:
try
{
db.store(mydata);
}
finally
{
db.cleanup();
}
Run Code Online (Sandbox Code Playgroud)
我以为try应该有一个catch?
为什么这段代码会这样做?
Tay*_*ese 171
如果您希望当前正在执行的方法仍然抛出异常,同时允许适当地清理资源,这将非常有用.下面是从调用方法处理异常的具体示例.
public void yourOtherMethod() {
try {
yourMethod();
} catch (YourException ex) {
// handle exception
}
}
public void yourMethod() throws YourException {
try {
db.store(mydata);
} finally {
db.cleanup();
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*nen 68
它就在那里,因为db.cleanup()即使try块中的代码抛出异常,程序员也希望确保调用它.该块不会处理任何异常,但它们只会在执行finally块后向上传播.
Kon*_*lph 20
为什么这段代码会这样做?
因为显然代码不知道如何在这个级别处理异常.这很好 - 只要其中一个调用者执行,即只要异常最终在某处处理.
通常,低级代码无法对异常做出适当的反应,因为需要通知用户,或者必须记录异常,或者必须尝试其他策略.低级代码仅执行一个功能,并且不了解更高级别的决策.
但是代码仍然需要清理它的资源(因为如果没有,它们会泄漏),所以它只是在finally子句中执行,确保它始终发生,无论是否抛出异常.
| 归档时间: |
|
| 查看次数: |
65242 次 |
| 最近记录: |