This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
The exception was being thrown because it is left to the runtime to propagate it out because the try just marked the exception status.
When you put a return in the finally you explicitly handle the exit status of the try block and since the finally is always executed it will override the exception status that was set earlier. That is why you should never return from a finally block. Most IDEs will give you a warning if you have a finally that does not complete normally.