"throw new Exception"和"new Exception"之间的区别是什么?

7

我很感兴趣了解如何正确使用throw new Exception()new Exception()。在使用new Exception()的情况下,我发现代码会继续执行下一条语句,而不是抛出异常。

但是有人告诉我,我们应该使用new Exception()来抛出RuntimeException

能否有人给我讲解一下呢?


新的异常意味着创建一个实例(与new Integer(...)相同),但除非你抛出它,否则不会发生任何异常... - ΦXocę 웃 Пepeúpa ツ
1
谁告诉我们应该使用new Exception()来抛出RuntimeException?在哪里?用什么理由?new Exception()不会抛出已实例化的异常。 - davmac
3个回答

6

new Exception() 表示创建一个实例(与创建new Integer(...)相同),但在抛出异常之前不会发生任何异常...

考虑以下代码片段:

public static void main(String[] args) throws Exception {
    foo(1);
    foo2(1);
    }

    private static void foo2(final int number) throws Exception {
    Exception ex;
    if (number < 0) {
        ex = new Exception("No negative number please!");
        // throw ex; //nothing happens until you throw it
    }

    }

    private static void foo(final int number) throws Exception {
    if (number < 0) {
        throw new Exception("No negative number please!");
    }

    }

如果参数为负数,方法foo()会抛出异常,但是方法foo2()会创建一个异常实例。


2
Exception e = new Exception ();

创建一个新的异常,稍后可以抛出。使用:

throw e;

鉴于

throw new Exception()

一行代码创建并抛出异常

要创建并抛出运行时异常

throw new RuntimeException()

1

new Exception() 表示你正在创建一个 Exception 类型的新实例。这意味着你只是实例化了一个类似于其他对象如 new String("abc") 的对象。当你在下面几行代码执行中要抛出类型为 Exception 的异常时,你会这样做。

而当你说 throw new Exception() 时,这意味着你要将程序控制权移交给调用者,并且不执行此 throw 语句之后的进一步语句。

当你发现没有办法继续向前执行时,你会在这种情况下这样做,因此让调用者知道我无法处理这种情况,如果你知道如何处理这种情况,请这样做。

没有最佳实践,因为你正在比较橙子和苹果。但请记住,在抛出异常时,你总是抛出有意义的异常,例如 IO 中的 FileNotFoundException,如果文件不存在,则抛出该异常,而不是其父级 IOException。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接