为什么不需要捕获 IllegalArgumentException?

Nik*_*s R 6 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");
}
Run Code Online (Sandbox Code Playgroud)

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

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

zae*_*dam 6

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

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

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

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