Java Exception Gotcha

I’ve been doing a bit of study for the Sun Certified Java Programmer exam recently, and just studied a piece of code which I was tricked by, so I thought I’d post it here.

When doing exception handling in Java, I always thought that a return statement prevented a finally { } block from being called. In other words, I assumed the output from the following code snippet should be “exe1”, not “exe1 finally”.

In actual fact, despite the return statement in the catch block, the finally method is still called prior to the method returning. As should be obvious, the ” what now?” message is never printed in this instance.

So, in summary, it’s reassuring to know that the finally block is called even when an explicit return statement is added – it means things like DB connections will always be closed. I always was a little nervous about return statements in try {…} catch {…} blocks, but now after reassuring myself it seems there is no need for this.