62,614
社区成员
发帖
与我相关
我的任务
分享
public class X
{
public static void main(String [] args)
{
try
{
badMethod();
System.out.print("A");
}
catch (RuntimeException ex) /* Line 10 */
{
System.out.print("B");
}
catch (Exception ex1)
{
System.out.print("C");
}
finally
{
System.out.print("D");
}
System.out.print("E");
}
public static void badMethod()
{
throw new RuntimeException();
}
14.20.2 Execution of try–catch–finally
After the great captains and engineers have accomplish’d their work,
After the noble inventors—after the scientists, the chemist,
the geologist, ethnologist,
Finally shall come the Poet . . .
A try statement with a finally block is executed by first executing the try
block. Then there is a choice:
14.20.2 Execution of try–catch–finally BLOCKS AND STATEMENTS
400
• If execution of the try block completes normally, then the finally block is
executed, and then there is a choice:
◆ If the finally block completes normally, then the try statement completes
normally.
◆ If the finally block completes abruptly for reason S, then the try statement
completes abruptly for reason S.
• 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 assignable to the parameter 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
statement 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
statement completes abruptly for reason S (and reason R is discarded).
◆ 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 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 finally block is executed. Then there is a choice:
BLOCKS AND STATEMENTS Execution of try–catch–finally 14.20.2
401
◆ 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 statement
completes abruptly for reason S (and reason R is discarded).