I wonder why the IllegalArgumentException class does not need to be catched or declared, while other exceptions have to (eg java.net.MalformedURLException).

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

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

I know that Errors do not have to be declared because they are not intended to be catched.

I'd like to declare a new exception which also does not require to be catched.

有帮助吗?

解决方案

There are two types of Exceptions in Java: Checked Exceptions and Unchecked Exceptions. Checked exception has to be caught or declared to be thrown (like MalfomedURLException) but catching Unchecked exceptions (like IllegalArgumentException) is not mandatory and you can let the caller catch them (or throw them up to its caller).

For more information, take a look at this post:

Java: Checked vs Unchecked Exceptions Explanation

If you inherit your custom exception class from RuntimeException or any exception class inherited from it, then catching your exception will not be mandatory.

其他提示

IllegalArgumentException is unchecked exception , so if you do not catch it then it will be handled by JVM , these exceptions are sublclasses of RuntimeException,Error, while MalformedURLException is checked exception which must be caught by programmer.All IOExceptions are checked Exceptions Read here for more info

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top