异常处理流程差异

时间:2017-09-10 16:52:13

标签: java exception-handling

我的代码如下: -

class Varr {    
    public static void main(String[] args) {    
        try {
            System.out.println(10/0);
        }
        catch(ArithmeticException e) {
            System.out.println("catch1");
            System.out.println("catch1");
            throw new ArithmeticException ("Exce");             
        }
        finally {   
            System.out.println("finally");
        }
    }
}

输出为: -

catch1

catch1

finally

Exception in thread "main" java.lang.ArithmeticException: Exce
  at one.Varr.main(Varr.java:22)

根据我的知识,流程必须首先尝试然后捕获,最后最后但是根据输出,流程是尝试然后几行捕获到throw异常语句然后最后和catch块的throw异常语句最后。

为什么流量存在差异,我的意思是为什么最终在抛出catch块的新异常语句之前执行

2 个答案:

答案 0 :(得分:0)

因为无论finallytry条款的结果如何,都必须执行catch的块。

在您的情况下,运行时知道有一个异常必须向上传播,但在此之前,它会执行finally块内的任何内容。

finally块完成时,它会传播可能已经引发的任何异常,否则流程会继续。

答案 1 :(得分:0)

您可以查看essentials of finally

  

当try块退出时,finally块始终执行。这个   确保即使出现意外情况也会执行finally块   异常发生。