Quoting The
Java Preogramming Language, Third Edition, page 206:
A finally clause is always entered with a reason. The reason may be that the try code finished normally, that it executed a ... return, or that an exception was thrown ... The reason is remembered when the finally clause exits by falling out the bottom. However, if the finally block creates its own reason to leave by executing a ... return, ... that reason supercedes the original one and the original reason is forgotten.
In short, a return statement in a finally block is acted on immediately on execution.
I was not able to find what happens if the return statement is in the catch block. Maybe I'll try it out and see.