没有任何警告或错误,没有捕获块仍然继续执行

时间:2015-03-29 11:24:04

标签: java exception-handling try-catch-finally

我有这个代码。在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 */
        } 
    }

2 个答案:

答案 0 :(得分:1)

您将aMethod()声明为throws Exception,因此它可以抛出任何已检查的异常,而不必捕获任何内容。

答案 1 :(得分:1)

    始终执行
  • finally块,异常或不执行 * 。这就是导致您看到的第一个打印输出"finally"的原因。
  • 接下来,未捕获的异常传播到main,它会被catch块捕获,生成"exception"
  • 之后,您的程序会打印"finished"以完成输出。

这就是finally的工作原理。而且,如果你这样做

try {
    throw new Exception();
} catch (Exception e) {
    ...
} finally {
    ...
}

将执行catchfinally块中的代码。

* 在构建一个不执行finally块的程序退出的情况下,有一些极端情况,但它与示例中的代码无关。