static int retIntExc() throws Exception{
int result = 1;
try {
result = 2;
throw new IOException(\"Exception rised.\");
} catch (ArrayInd
This is why you can't return from a finally block in C# :)
It's absolutely the behaviour laid out in the Java Language Specification though. It's specified in section 14.20.2.
If the finally block completes abruptly for reason S, then the try statement completes abruptly for reason S (and the throw of value V is discarded and forgotten).
Returning is one example of completing abruptly; if the finally
block threw an exception, that would also complete abruptly, losing the original exception.
The quote above was from this nested set of bullet points, leaving out the options which aren't applicable here:
- If execution of the try block completes abruptly because of a throw of a value V, then there is a choice:
- If the run-time type of V is not assignable to the parameter of any catch clause of the try statement, then the finally block is executed. Then there is a choice:
- If the finally block completes abruptly for reason S, then the try statement completes abruptly for reason S (and the throw of value V is discarded and forgotten).