为啥finally要重新给个异常,感觉没有意义
Topic source天啊,我晕了,前面我在讲啥啊(丢脸)在b占恶补了一下。
如果没有finally{},正常抛出catch捕捉到的异常,应该会有提示“NumberFormatException”的异常;
但现在有了finally{},catch捕捉的异常被屏蔽,此时定义一个异常为“IllegalArgumentException”,此时运行会直接提示这一异常。
但是由于有e.addSuppressed(origin);的存在,我们将catch中抛出的异常添加了进来,所以最终提示仍然会有catch中抛出的异常提示。
总的来说,现在有了两个异常。而至于我说的初始化---大致就是得先有第一个异常出现,我们才能使用或者说才有添加原来异常这个是说法e.addSuppressed(origin);
总结:catch()就是捕捉异常同时还会处理异常,如果catch处理后你又中加了throw,最后还是会提示你原来出现的异常是啥,在哪
- 1
Godspeed_ll
public class Main {
public static void main(String[] args) throws Exception {
Exception origin = null;
try {
System.out.println(Integer.parseInt("abc"));
} catch (Exception e) {
origin = e;
throw e;
} finally {
Exception e = new IllegalArgumentException();
if (origin != null) {
e.addSuppressed(origin);
}
throw e;
}
}
}
由于finally内部的代码块一定会执行,给它在里面的Exception e = new IllegalArgumentException();这个不是无事生非吗