Различие между исключением Непроверенным или исключением на этапе выполнения

Это было вопросом об интервью. Каково основное различие между исключением непроверенным и ошибкой, поскольку оба не пойманы? Они завершат программу.

33
задан ROMANIA_engineer 18 December 2014 в 23:59
поделиться

5 ответов

Как указано в их названии, непроверенные исключения не проверяются во время компиляции , что означает, что компилятор не требует методов для перехвата или указания (с бросает ) им. Классы, принадлежащие к этой категории, подробно описаны в разделе 11.2 Проверка исключений во время компиляции JLS:

Непроверенные классы исключений - это класс RuntimeException и его подклассы, а также класс Error и его подклассы . Все остальные классы исключений - это проверенные классы исключений . API Java определяет ряд классов исключений, как отмеченных, так и непроверенных. Дополнительные классы исключений, как отмеченные, так и непроверенные, могут быть объявлены программистами. См. §11.5 для описания иерархии классов исключений и некоторых классов исключений, определенных Java API и виртуальной машиной Java.

На следующем рисунке показана иерархия исключений:

alt text

Класс Ошибка и его подклассы являются исключениями, восстановление которых обычно не ожидается, и, как объяснено в , 11.5 Иерархия исключений :

Класс Ошибка является отдельным подклассом Throwable , отличным от Исключения в иерархии классов, чтобы разрешить программам использовать идиому:

} catch (Exception e) {
 

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

Подводя итог, RuntimeException - это подмножество непроверенных исключений для исключений, из которых возможно восстановление (но непроверенное исключение не является синонимом RuntimeException как многие отвечаем здесь).

62
ответ дан 27 November 2019 в 17:44
поделиться

Примечание: RuntimeException ЯВЛЯЕТСЯ непроверяемым исключением

Непроверенное исключение будет один, который, как известно, возможен в момент выполнения, но не перехвачен, например, исключение NullPointerException всегда возможно, если вы не проверите их и вызовет завершение вашей программы. Вы можете проверить это, заключив код в try-catch, но это не выполняется принудительно (в отличие от проверенного исключения, которое заставит обработать исключение каким-либо образом).

Ошибка - это что-то, что может произойти в любой момент во время выполнения и не может быть обнаружено, потому что оно не вызвано явным образом конкретным вызовом метода и т. Д. Например, OutOfMemoryError или StackOverflowError. Оба эти события могут произойти в любое время и приведут к прекращению работы вашего приложения. Выявление этих ошибок не имеет смысла, поскольку они указывают на то, что произошло что-то, от чего вы не сможете исправить.

5
ответ дан 27 November 2019 в 17:44
поделиться

В JavaDocs это довольно хорошо суммировано.

java.lang.RuntimeException :

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

От метода не требуется объявлять в предложении throws какие-либо подклассы RuntimeException, которые могут быть сгенерированы во время выполнения метода, но не обнаружены.

java.lang.Error :

Ошибка - это подкласс Throwable, указывающий на серьезные проблемы, которые разумное приложение не должно пытаться уловить. Большинство таких ошибок являются ненормальными. Ошибка ThreadDeath, хотя и является «нормальным» состоянием, также является подклассом Error, поскольку большинству приложений не следует пытаться ее перехватить.

От метода не требуется объявлять в своем предложении throws какие-либо подклассы Error, которые могут быть сгенерированы во время выполнения метода, но не обнаружены, поскольку эти ошибки являются ненормальными условиями, которые никогда не должны возникать.

Обратите внимание, что «непроверенное исключение» является просто синонимом RuntimeException .

10
ответ дан 27 November 2019 в 17:44
поделиться

RuntimeExceptions и такие ошибки, как OutOfMemoryError , не нужно перехватывать, и их можно выбросить, пока они не достигнут main (), которая закроет приложение.

Другие исключения вызывают ошибку компиляции, если они не обнаружены или не включены в список исключений.

1
ответ дан 27 November 2019 в 17:44
поделиться

Ошибки указывают на фундаментальные проблемы, которые никогда не должны возникать. Если вы столкнетесь с ошибкой s.th. действительно плохое случилось.
Непроверенные исключения (исключения времени выполнения), с другой стороны, используются всякий раз, когда исключение можно каким-то образом ожидать, но в этом случае нет разумного способа с ним справиться, и, таким образом, оператор try catch будет просто раздражать и пустая трата времени. Космос.

3
ответ дан 27 November 2019 в 17:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: