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

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

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

4b9b3361

Ответ 1

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

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

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

alt text

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

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

} catch (Exception e) {

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

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

Ответ 2

В JavaDocs все это хорошо.

java.lang.RuntimeException:

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

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

java.lang.Error:

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

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

Обратите внимание, что "unchecked exception" является просто синонимом RuntimeException.

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

Ответ 8

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

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

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

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

Ошибка:

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