我有这段代码。在aMethod()
中,有try块,但没有catch块来处理抛出的异常。生成的输出是最终异常完成。有人能解释一下这是怎么发生的吗?
public class Test
{
public static void aMethod() throws Exception
{
try /* Line 5 */
{
throw new Exception(); /* Line 7 */
}
finally /* Line 9 */
{
System.out.print("finally "); /* Line 11 */
}
}
public static void main(String args[])
{
try
{
aMethod();
}
catch (Exception e) /* Line 20 */
{
System.out.print("exception ");
}
System.out.print("finished"); /* Line 24 */
}
}
finally
块总是被执行,无论是否*。这就是您看到的第一个打印输出"finally"
的原因- 接下来,未捕获的异常传播到
main
,在那里它被捕获在catch
块中,生成"exception"
- 之后,程序将打印
"finished"
以完成输出
finally
就是这样工作的。此外,如果你这样做
try {
throw new Exception();
} catch (Exception e) {
...
} finally {
...
}
则将执行CCD_ 9和CCD_。
*有些情况下,您可以构造一个程序,该程序在不执行finally
块的情况下退出,但它与示例中的代码无关。
您将aMethod()
声明为throws Exception
,因此它可以抛出任何已检查的异常,而不必捕获任何内容。