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

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

9 ответов

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

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

Следующая картинка иллюстрирует иерархию исключений:

альтернативный текст

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

Класс Error это отдельный подкласс Throwable, в отличие от Exception в иерархии классов, чтобы позволить программам использовать идиому:

} catch (Exception e) {

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

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

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

java.lang.RuntimeException:

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

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

java.lang.Error:

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

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

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

Примечание: RuntimeException является непроверенным исключением

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

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

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

Проверено исключение:

  • Классы, которые расширяются Throwable класс кроме RuntimeException а также Error известны как проверенные исключения.
  • Также известен как исключение времени компиляции, потому что этот тип исключений проверяется во время компиляции. Это означает, что если мы игнорируем эти исключения (не обрабатываются с try/catch или же throw исключение), то произошла ошибка компиляции.
  • Это программно восстанавливаемые проблемы, вызванные непредвиденными условиями вне контроля кода (например, сбой базы данных, ошибка ввода-вывода файла, неправильный ввод и т. Д.)
  • Мы можем избежать их использования try/catch блок.
  • Пример: IOException, SQLException так далее

Непроверенное исключение:

  • Классы, которые расширяются RuntimeException известны как непроверенные исключения
  • Непроверенные исключения не проверяются во время компиляции, а проверяются во время выполнения. И поэтому они также называются "исключение времени выполнения".
  • Они также являются программно восстанавливаемыми проблемами, но в отличие от проверенного исключения они вызваны ошибками в потоке кода или конфигурации.
  • Пример: ArithmeticException,NullPointerException, ArrayIndexOutOfBoundsException так далее
  • Так как они являются ошибкой программирования, их можно избежать, используя хорошее / мудрое кодирование. Например, происходит "деление на ноль" ArithmeticEceeption, Мы можем избежать их с помощью простого условия - if(divisor!=0), Точно так же мы можем избежать NullPointerException просто проверяя ссылки - if(object!=null) или используя даже лучшие методы

Ошибка:

  • Error относится к безвозвратной ситуации, которая не обрабатывается try/catch
  • Пример: OutOfMemoryError, VirtualMachineError, AssertionError и т.п.

Ошибка: это исключительные условия, которые являются внешними по отношению к приложению и которые приложение обычно не может предвидеть или восстанавливать.

Исключение во время выполнения: это исключительные условия, которые являются внутренними для приложения, и которые приложение обычно не может ожидать или восстанавливать.

Вы можете прочитать это:

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

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

Возможно, вы захотите взглянуть на эту ссылку, которая объясняет три вида исключений.

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

Надеюсь, это поможет.

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

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

И java.lang.Error, и java.lang.Exception являются подклассами java.lang.Throwable.

Класс java.lang.Error представляет ошибки, которые в основном вызваны средой, в которой работает приложение. Например, OutOfMemoryError возникает, когда у JVM заканчивается память, или StackOverflowError возникает при переполнении стека.

Где класс java.lang.Exception представляет исключения, которые в основном вызваны самим приложением. Например, NullPointerException возникает, когда приложение пытается получить доступ к нулевому объекту, или ClassCastException возникает, когда приложение пытается преобразовать несовместимые типы классов.

Все подклассы java.lang.Exception (кроме подклассов RunTimeException) являются проверенными исключениями. Например, FileNotFoundException, IOException, SQLException, ClassNotFoundException и т. д.…

Все подклассы java.lang.RuntimeException и java.lang.Error являются непроверяемыми исключениями. Например, NullPointerException, ArithmeticException, ClassCastException, ArrayIndexOutOfBoundsException, StackOverflowError, OutOfMemoryError и т. д.…

Источник: ошибка против исключений , проверенные и непроверенные исключения

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