我想知道为什么IllegalArgumentException
类不需要需要被捕获或声明,而其他例外必须(例如java.net.MalformedURLException
)。
public void foo() {
throw new IllegalArgumentException("spam");
}
public void bar() throws MalformedURLException { // required
throw new MalformedURLException("ham");
}
我知道Error
不必声明,因为它们不是为了被捕获。
我想宣布一个新的例外,也不需要被捕获。
答案 0 :(得分:4)
Java中有两种类型的例外:已检查的例外和未经检查的例外。必须捕获或声明被检查的异常被抛出(如MalfomedURLException
),但捕获未经检查的异常(如IllegalArgumentException
)不是强制性的,您可以让调用者捕获它们(或将它们抛给调用者) )。
有关更多信息,请查看以下文章:
Java: Checked vs Unchecked Exceptions Explanation
如果从RuntimeException
继承自定义异常类或从其继承的任何异常类,则捕获异常将不是必需的。
答案 1 :(得分:1)
IllegalArgumentException是未经检查的异常,因此如果你没有捕获它,那么它将由JVM处理,这些异常是RuntimeException,Error的子类,而MalformedURLException是检查异常,必须由programmer捕获。所有IOExceptions都被检查Exceptions { {3}}