"之间的差异抛出新的异常"和"新的例外"?

时间:2016-10-23 07:38:27

标签: java exception throw

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

但我被告知我们应该使用new Exception()投掷RuntimeException

有人可以对此有所了解吗?

3 个答案:

答案 0 :(得分:4)

new Exception()表示创建一个实例(与创建新的整数(...)相同) 但是在你抛出它之前不会有例外......

请考虑以下代码段:

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

答案 1 :(得分:1)

Exception e = new Exception ();

只需创建一个新的Exception,稍后可以抛出。使用

throw e;

尽管

throw new Exception()

在一行中创建并抛出异常

创建并抛出运行时异常

throw new RuntimeException()

答案 2 :(得分:0)

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

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

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

没有最好的做法,比如你将橘子与苹果进行比较。但是请记住,在抛出异常时,你总是抛出一个有意义的异常,比如IO,如果文件不存在,它会抛出FileNotFoundException而不是它的父IOException