В Java, почему мне не удается обработать некоторые типы исключений, но не другие? - PullRequest
1 голос
/ 05 февраля 2012

Почему у меня может быть

public void someMethod() {
    throw new UnsupportedOperationException();
}

но не

public void someMethod() {
    throw new throw new IOException();
}

Первое нормально, второе генерирует ошибку компиляции «необработанное исключение типа IOException».

Ответы [ 7 ]

5 голосов
/ 05 февраля 2012

Все вещи, которые могут быть брошены: Throwable.Существует два типа Throwable:

Один подкласс Exception - это RuntimeException, который "не проверен" - это означает, что вам не нужно объявлять или ловить их.Они, как правило, для «ошибок программирования», например NullPointerException или ArrayOutOfBoundsException.

Errors также «не проверены» и предназначены для «невосстановимого»ситуации, такие как OutOfMemoryError и т. д.

Любой Throwable не , подкласс Error или RuntimeException проверяется и должен быть объявлен как брошенный или пойманный.

1 голос
/ 05 февраля 2012

UnsupportedOperationException - это RuntimeException , которое является типом непроверенного исключения. Это исключения, которые возникают во время выполнения программы и указывают на состояние, которое вряд ли будет восстановлено.

Проверенные исключения, тип, который вы должны обрабатывать каким-либо образом, являются исключениями, которые вы, вероятно, можете написать для корректной обработки кода.

Спецификация языка Java, раздел 11.2.5 , очень хорошо гласит:

Классы исключений времени выполнения (RuntimeException и его подклассы) освобождаются от проверки во время компиляции, потому что, по мнению разработчики языка программирования Java, вынужденные объявлять такие исключения не помогут значительно установить правильность программ.

Есть несколько хороших объяснений идеи двух типов. Учебник по Java имеет страницу под названием Непроверенные исключения - спор , и если вы хотите более продолжительного обсуждения, см. Проверенные или непроверенные исключения?

1 голос
/ 05 февраля 2012

Вам нужно посмотреть на разницу между проверкой и непроверенными исключениями.

1 голос
/ 05 февраля 2012

IOException является проверенным исключением, в то время как UnsupportedOperationException является RuntimeException (не проверено).Проверенные исключения должны быть перехвачены или перехвачены.http://java.sun.com/docs/books/jls/second_edition/html/exceptions.doc.html

1 голос
/ 05 февраля 2012

Поскольку RuntimeException s и его подклассы являются "непроверенными" исключениями и их не нужно объявлять брошенными или перехваченными. Проверенные исключения делают.

JLS 11, исключения содержит подробные сведения об исключениях, JLS 11.2, проверка исключений во время компиляции обсуждает различия на высоком уровне.

1 голос
/ 05 февраля 2012

В Java есть два типа исключений;checked и unchecked.

Вы можете отловить или указать, что ваш метод генерирует checked исключений.Это верно для вашего второго примера с IOException.

http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

0 голосов
/ 05 февраля 2012

IOException является "проверенным" исключением и должно обрабатываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...