我很感兴趣了解如何正确使用throw new Exception()
和new Exception()
。在使用new Exception()
的情况下,我发现代码会继续执行下一条语句,而不是抛出异常。
但是有人告诉我,我们应该使用new Exception()
来抛出RuntimeException
。
能否有人给我讲解一下呢?
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()会创建一个异常实例。
Exception e = new Exception ();
创建一个新的异常,稍后可以抛出。使用:
throw e;
鉴于
throw new Exception()
一行代码创建并抛出异常
要创建并抛出运行时异常
throw new RuntimeException()
new Exception()
表示你正在创建一个 Exception 类型的新实例。这意味着你只是实例化了一个类似于其他对象如 new String("abc")
的对象。当你在下面几行代码执行中要抛出类型为 Exception
的异常时,你会这样做。
而当你说 throw new Exception()
时,这意味着你要将程序控制权移交给调用者,并且不执行此 throw 语句之后的进一步语句。
当你发现没有办法继续向前执行时,你会在这种情况下这样做,因此让调用者知道我无法处理这种情况,如果你知道如何处理这种情况,请这样做。
没有最佳实践,因为你正在比较橙子和苹果。但请记住,在抛出异常时,你总是抛出有意义的异常,例如 IO 中的 FileNotFoundException,如果文件不存在,则抛出该异常,而不是其父级 IOException。
new Exception()
来抛出RuntimeException
?在哪里?用什么理由?new Exception()
不会抛出已实例化的异常。 - davmac