为什么没有必要捕获IllegalArgumentException?

时间:2013-10-04 20:33:14

标签: java exception custom-exceptions throws

我想知道为什么IllegalArgumentException类不需要需要被捕获或声明,而其他例外必须(例如java.net.MalformedURLException)。

public void foo() {
    throw new IllegalArgumentException("spam");
}

public void bar() throws MalformedURLException { // required
    throw new MalformedURLException("ham");
}

我知道Error不必声明,因为它们不是为了被捕获。

我想宣布一个新的例外,也不需要被捕获。

2 个答案:

答案 0 :(得分:4)

Java中有两种类型的例外:已检查的例外未经检查的例外。必须捕获或声明被检查的异常被抛出(如MalfomedURLException),但捕获未经检查的异常(如IllegalArgumentException)不是强制性的,您可以让调用者捕获它们(或将它们抛给调用者) )。

有关更多信息,请查看以下文章:

Java: Checked vs Unchecked Exceptions Explanation

如果从RuntimeException继承自定义异常类或从其继承的任何异常类,则捕获异常将不是必需的。

答案 1 :(得分:1)

IllegalArgumentException是未经检查的异常,因此如果你没有捕获它,那么它将由JVM处理,这些异常是RuntimeException,Error的子类,而MalformedURLException是检查异常,必须由programmer捕获。所有IOExceptions都被检查Exceptions { {3}}