Java Reference
In-Depth Information
♦ If the run-time type of
V
is assignment compatible with a catchable exception
class of any
catch
clause of the
try
statement, then the first (leftmost) such
catch
clause is selected. The value
V
is assigned to the parameter of the selected
catch
clause, and the
Block
of that
catch
clause is executed. Then there is a choice:
If the
catch
block completes normally, then the
finally
block is executed.
Then there is a choice:
If the
finally
block completes normally, then the
try
statement completes
normally.
If the
finally
block completes abruptly for any reason, then the
try
state-
ment completes abruptly for the same reason.
If the
catch
block completes abruptly for reason
R
, then the
finally
block is
executed. Then there is a choice:
If the
finally
block completes normally, then the
try
statement completes
abruptly for reason
R
.
If the
finally
block completes abruptly for reason
S
, then the
try
state-
ment completes abruptly for reason
S
(and reason
R
is discarded).
♦ If the run-time type of
V
is not assignment compatible with a catchable excep-
tion class of any
catch
clause of the
try
statement, then the
finally
block is ex-
ecuted. Then there is a choice:
If the
finally
block completes normally, then the
try
statement completes
abruptly because of a
throw
of the value
V
.
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).
• If execution of the
try
block completes abruptly for any other reason
R
, then the
fi-
nally
block is executed, and then there is a choice:
♦ If the
finally
block completes normally, then the
try
statement completes ab-
ruptly for reason
R
.
♦ If the
finally
block completes abruptly for reason
S
, then the
try
statement com-
pletes abruptly for reason
S
(and reason
R
is discarded).