我的代码如下: -
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块的新异常语句之前执行
答案 0 :(得分:0)
因为无论finally
或try
条款的结果如何,都必须执行catch
的块。
在您的情况下,运行时知道有一个异常必须向上传播,但在此之前,它会执行finally
块内的任何内容。
当finally
块完成时,它会传播可能已经引发的任何异常,否则流程会继续。
答案 1 :(得分:0)
当try块退出时,finally块始终执行。这个 确保即使出现意外情况也会执行
finally
块 异常发生。