The way to think about it is just that the code in a "finally" block
always executes after the corresponding try block (and after any catch blocks that are used). The only time a "finally" block is skipped is if the
thread that's executing the code is terminated, which will happen only if System.exit is called, if the JVM crashes, or if someone calls the "Thread.stop()" method. There are no notions of priority.
This means, if you think about it, that putting "return" into a finally block is virtually always a very bad idea. As you see here, if both a try and a finally include "return", then the try block's return value is ignored.