【发布时间】:2012-01-05 12:26:52
【问题描述】:
RuntimeException 被抛出 try 块而不被捕获,而 finally 子句调用 System.exit()。
public static void main(String[] args) {
try {
Integer.valueOf("NotANumber");
} finally {
System.out.println("finally");
System.exit(0);
}
}
输出是
finally
如果 System.exit(0) 从 finally 中删除,则输出为
finally
Exception in thread "main" java.lang.NumberFormatException: For input string: "NotANumber"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.valueOf(Integer.java:554)
at exception.MyExcepTest.main(MyExcepTest.java:20)
“finally”可能出现在NumberFormatException消息之前、之后或之间。
谁能解释一下?
【问题讨论】:
-
仅供参考,在我方便的系统上,上面有 Sun/Oracle 的 Java6(特别是“Java(TM) SE Runtime Environment (build 1.6.0_26-b03)”),我从来没有见过异常消息。我只看到“最后”那一行。而如果我删除
System.exit(0)行,我会看到两者(可靠地首先是“finally”)。
标签: java try-catch-finally runtimeexception