14

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

5 Answers 5

15

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.

Sign up to request clarification or add additional context in comments.

4 Comments

It's also good practice because it explicitly states what is going on, e.g. regardless of execution we must free resource x, etc.
Note, in Java 7 you can use a try-with-resources statement to close certain resources, so you wouldn't need a finally in this case.
@duffymo But wouldn't codeblock C in snippet B also take care of this?
Not guaranteed if someone puts a return in the catch block.
3

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

Comments

1

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.

Comments

1

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.

Comments

0

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.