finally block always executes when the
try block exits. This ensures that the
finally block is executed even if an unexpected exception occurs. But
finally is useful for more than just exception handling — it allows having cleanup code accidentally bypassed by a
break. Putting cleanup code in a
finally block is always a good practice, even when no exceptions are anticipated.
If the JVM exits while the
catch code is being executed, then the
finally block may not execute. Likewise, if the thread executing the
catch code is interrupted or killed, the
finally block may not execute even though the application as a whole continues.