Difference between “throw new Exception” and “new Exception”?

和自甴很熟 提交于 2020-03-21 16:21:14

问题


I am interested to know best practice to use throw new Exception() and new Exception(). In case of using new Exception(), I have seen that code moves to next statement instead of throwing exception.

But I am told that we should use new Exception() to throw RuntimeException.

Can anyone throw some light on this ?


回答1:


new Exception() means create an instance (same as creating new Integer(...)) but no exception will happen until you throw it...

Consider following snippet:

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!");
    }

    }

the method foo() will THROW an exception if the parameter is negative but the method foo2() will create an instance of exception if the parameter is negative




回答2:


Exception e = new Exception ();

Just creates a new Exception, which you could later throw. Using

throw e;

Whereas

throw new Exception()

Creates and throws the exception in one line

To create and throw a runtime exception

throw new RuntimeException()



回答3:


new Exception() means you are creating a new instance of Exception type. Which means you are just instantiating an object similar to others like new String("abc"). You would do this when you are about to throw an exception of type Exception in next few lines of code execution.

While when you say throw new Exception() this means you are saying move the program control to caller and don't execute the further statements after this throw statement.

You would do this in a situation where you find that there is no way to move ahead and execute further and hence let caller know that i can't handle this case and if you know how to handle this case, please do so.

There is no best practice as such as you are comparing oranges with apples. But remember when throwing an exception, you always throw a meaningful exception like IO has where if file is not present it throws FileNotFoundException instead of its parent IOException.



来源:https://stackoverflow.com/questions/40200662/difference-between-throw-new-exception-and-new-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!