7

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

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

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

我知道Errors 不必声明,因为它们不打算被捕获。

我想声明一个也不需要被捕获的新异常。

4

2 回答 2

7

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

有关更多信息,请查看此帖子:

Java:已检查与未检查的异常说明

如果您从自定义异常类RuntimeException或从它继承的任何异常类继承,那么捕获您的异常将不是强制性的。

于 2013-10-04T20:37:17.433 回答
1

IllegalArgumentException 是未经检查的异常,因此如果您不捕获它,它将由 JVM 处理,这些异常是 RuntimeException,Error 的子类,而 MalformedURLException 是必须由程序员捕获的检查异常。所有 IOExceptions 都是检查异常阅读这里了解更多信息

于 2013-10-04T20:41:06.610 回答