Discuss / Java / 为啥finally要重新给个异常,感觉没有意义

为啥finally要重新给个异常,感觉没有意义

Topic source

Godspeed_ll

#1 Created at ... [Delete] [Delete and Lock User]

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();这个不是无事生非吗

Godspeed_ll

#2 Created at ... [Delete] [Delete and Lock User]

感觉那句是为了给后面的e.addSuppressed(origin);一个初始化的e,而且那句最后也抛出了异常。不知道理解的对不对。。。

Godspeed_ll

#3 Created at ... [Delete] [Delete and Lock User]

天啊,我晕了,前面我在讲啥啊(丢脸)在b占恶补了一下。

如果没有finally{},正常抛出catch捕捉到的异常,应该会有提示“NumberFormatException”的异常;

但现在有了finally{},catch捕捉的异常被屏蔽,此时定义一个异常为“IllegalArgumentException”,此时运行会直接提示这一异常。

但是由于有e.addSuppressed(origin);的存在,我们将catch中抛出的异常添加了进来,所以最终提示仍然会有catch中抛出的异常提示。
总的来说,现在有了两个异常。而至于我说的初始化---大致就是得先有第一个异常出现,我们才能使用或者说才有添加原来异常这个是说法e.addSuppressed(origin);

总结:catch()就是捕捉异常同时还会处理异常,如果catch处理后你又中加了throw,最后还是会提示你原来出现的异常是啥,在哪

Joker.fu_95

#4 Created at ... [Delete] [Delete and Lock User]

一个异常直接抛出,多个异常抛出后,避免被覆盖,添加集中抛出


  • 1

Reply