Разница между непроверенным исключением или исключением во время выполнения - PullRequest
32 голосов
/ 23 апреля 2010

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

Ответы [ 8 ]

60 голосов
/ 23 апреля 2010

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

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

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

alt text

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

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

} catch (Exception e) {

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

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

9 голосов
/ 23 апреля 2010

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

java.lang.RuntimeException:

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

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

java.lang.Error:

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

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

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

4 голосов
/ 23 апреля 2010

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

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

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

3 голосов
/ 04 января 2015

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

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

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

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

Ошибка:

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

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

2 голосов
/ 18 декабря 2013

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

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

Возможно, вы захотите прочитать this :

1 голос
/ 28 января 2013

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

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

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

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

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

1 голос
/ 23 апреля 2010

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

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

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