Подтвердить что ты не робот

Почему исключение во время выполнения - это исключение без проверки?

Обычно, если какой-либо класс расширяет Exception, он становится проверенным исключением. Runtime exception также расширяет исключение. Тогда как это unchecked exception?

Похоже, что у них есть специальная проверка в компиляторе для этого специального случая?

РЕДАКТИРОВАТЬ: У меня есть правильная идея о проверенном v/s исключенном исключении и их плюсах и минусах и т.д. Я не исключаю различия между ними в ответе.

4b9b3361

Ответ 1

Это явно указано в спецификации раздел 11.1.1:

RuntimeException, и все его подклассы являются, вместе с тем, классами исключений во время выполнения.

Неконтролируемые классы исключений - это классы исключений во время выполнения и классы ошибок.

Проверенные классы исключений - все классы исключений, отличные от неконтролируемых классов исключений. То есть проверенные классы исключений - это все подклассы Throwable, отличные от RuntimeException, и его подклассы, а также Error и его подклассы.

Итак, да, компилятор определенно знает о RuntimeException.

Ответ 2

Да. Любой Throwable является проверенным исключением, за исключением Error, RuntimeException и (прямых или косвенных) подклассов.

Однако они проверяются компилятором, а не JVM; проверенные исключения - это функция времени компиляции, а не функция времени выполнения. (Обновление: теперь я вижу, что вы отредактировали свой вопрос, чтобы указать "компилятор", а не "JVM". ☺)


Продумать немного дальше., это не так, как если бы существовал какой-то интерфейс "проверенный-исключение". Логика просто жестко закодирована: "любой класс исключений является проверенным исключением, если он не является подтипом RuntimeException или Error".

Ответ 3

Вот полезная ссылка: http://www.javapractices.com/topic/TopicAction.do?Id=129

В нем объясняется разница между unchecked и checked и приведены некоторые примеры.

"Это несколько сбивает с толку, но также обратите внимание на то, что RuntimeException (unchecked) сам по себе является подклассом Exception (checked)."

Ответ 4

По 11.1.1. Виды исключений

Исключением является экземпляр класса Throwable (прямой подкласс Object) или один из его подклассов.

Throwable и все его подклассы являются коллективными классами исключений.

Обратите внимание, что подкласс Throwable не должен быть общим (§8.1.2).

Класс Exception и Error являются прямыми подклассами Throwable.

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

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

Ошибка и все ее подклассы являются коллективными классами ошибок.

Ошибка класса - это отдельный подкласс Throwable, отличный от Exception в иерархии классов, чтобы позволить программам использовать catch catch {} (исключение e) {"(§11.2.3), чтобы поймать все исключения, из которых восстановление могут быть возможны без ошибок при сбоях, из которых восстановление обычно невозможно.

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

RuntimeException и все его подклассы являются в совокупности классами исключений во время выполнения.

Неконтролируемые классы исключений - это классы исключений во время выполнения и классы ошибок.

Проверенные классы исключений - все классы исключений, отличные от неконтролируемых классов исключений. То есть проверенные классы исключений - это все подклассы Throwable, отличные от RuntimeException, и его подклассы, а также Error и его подклассы.