Most existing answers contain fragments of the correct answer, but none of them are accurate enough.
The finally block will always be reached after try and potentially catch blocks, unless the JVM closes in advance. However, if a bit of code inside the finally block disables the JVM or throws an exception, the end of the block may not be reached.
For a Sun Certified Programmer for Java 6 Tutorial:
The last word, as always, is a specification of the Java language. The finally behavior is fully explained in ยง14.20.2 Executing try-catch-finally .
As an additional note: you are correct that return in try will not stop the execution of finally . In fact, finally is introduced immediately after return is encountered, before .
source share