在没有任何警告或错误的情况下,没有catch块仍在继续执行



我有这段代码。在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,因此它可以抛出任何已检查的异常,而不必捕获任何内容。

相关内容

  • 没有找到相关文章

最新更新