Почему нет необходимости перехватывать исключение IllegalArgumentException?

Интересно, почему IllegalArgumentException Класс не должен быть перехвачен или объявлен, в то время как другие исключения должны (например, java.net.MalformedURLException).

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

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

я знаю это ErrorНе нужно объявлять, потому что они не предназначены для ловли.

Я хотел бы объявить новое исключение, которое также не требует перехвата.

2 ответа

Решение

В Java существует два типа исключений: проверенные исключения и непроверенные исключения. Проверенное исключение должно быть перехвачено или объявлено как выброшенное (например, MalfomedURLException) но ловит непроверенные исключения (вроде IllegalArgumentException) не является обязательным, и вы можете позволить вызывающему абоненту поймать их (или выбросить их вызывающему).

Для получения дополнительной информации, посмотрите на этот пост:

Java: проверено против непроверенных исключений Объяснение

Если вы унаследовали свой пользовательский класс исключений от RuntimeException или любой класс исключения, унаследованный от него, то перехват вашего исключения не будет обязательным.

IllegalArgumentException является непроверенным исключением, поэтому, если вы его не перехватите, оно будет обработано JVM, эти исключения являются подклассами RuntimeException,Error, в то время как MalformedURLException является проверенным исключением, которое должно быть перехвачено программистом. Информация

Другие вопросы по тегам