Почему нет необходимости перехватывать исключение 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 является проверенным исключением, которое должно быть перехвачено программистом. Информация