"throw new Exception" 和 "new Exception" 的区别?

Difference between "throw new Exception" and "new Exception"?

我有兴趣了解使用 throw new Exception()new Exception() 的最佳实践。在使用 new Exception() 的情况下,我看到代码移动到下一条语句而不是抛出异常。

但是我被告知我们应该使用 new Exception() 来抛出 RuntimeException

任何人都可以解释一下吗?

Exception e = new Exception ();

只需创建一个新的异常,稍后您可以抛出该异常。使用

throw e;

鉴于

throw new Exception()

在一行中创建并抛出异常

创建并抛出运行时异常

throw new RuntimeException()

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

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

你会在发现无法继续前进并进一步执行的情况下这样做,因此让来电者知道我无法处理这种情况,如果你知道如何处理这种情况,请这样做。

没有最佳实践,例如您将橙子与苹果进行比较。但是请记住,当抛出异常时,您总是会抛出一个有意义的异常,就像 IO 一样,如果文件不存在,它会抛出 FileNotFoundException 而不是其父 IOException.

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() 将创建一个异常实例