When should I use the finally-block in Java's try-catch-finally

Deadly 提交于 2019-12-21 03:35:13

问题


When should I use code snippet A instead of snippet B (i.e. what are the benefits of using snippet A)?:

Snippet A:

try {
    // codeblock A
}
catch (Exception ex) {
    // codeblock B
}
finally {
    //codeblock C
}

Snippet B:

try {
    // codeblock A
}
catch (Exception ex) {
    // codeblock B
}

//codeblock C

回答1:


Use a finally block if you have code that must execute regardless of whether or not an exception is thrown.

Cleaning up scarce resources like database connections are a good example.




回答2:


An obvious case is when you re-raise or throw another exception in your catch block.




回答3:


It's useful if you need to do some cleanup, e.g. close a database connection. Because "finally" is executed always, you don't need to do the bug-prone copy-paste of the same code in the end of the "try" and in also in one or more "catch" blocks.




回答4:


You must almost always use the snippet with finally block when you have resources that needs clean up in both successful or error scenarios. A typical example is the jdbc connection object which should always be closed (clean up) in the finally block.




回答5:


Imagine to have a return statement inside the catch block: the C block will not be executed in snippet B, but in snippet A it will, before returning.



来源:https://stackoverflow.com/questions/7405702/when-should-i-use-the-finally-block-in-javas-try-catch-finally

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!