Различия между Runtime / Checked/Unchecked/Error / Exception

каковы исключения во время выполнения и какие проверенные / непроверенные исключения и разница между ошибкой / исключением.Почему так много типов? Вместо этого Java может просто следовать простому дизайну (просто попробуйте/поймайте все типы) для обработки аномального состояния в программе?

6 ответов


Throwable находится в верхней части всех исключений. Под Throwable у вас есть ошибка и исключение. Под исключением у вас есть RuntimeException.

Java имеет два типа исключений-checked и unchecked. Проверенные исключения применяются компилятором (вы должны объявить их в предложении throws и поймать их в конечном итоге). Непроверенные исключения не применяются для перехвата или объявления в предложении throws.

(спорная часть ответ)

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

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

исключение существует как корень для всех ошибок не программиста (см. Исключение RuntimeException для "исключения"), например, файл не может быть создан, потому что диск заполнен. Вы не должны бросать, бросать или ловить исключение. Если вам нужно поймать исключение, убедитесь, что вы знаете, что делаете.

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


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

[Изображение предоставлено JavaTpoint].

есть три ключевых класса, чтобы помнить здесь:Throwable, Exception и Error. Среди эти классы Exception можно разделить на два типа: "проверенное исключение" и "исключение непроверенное".

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

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

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

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

ошибка:

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

почему так много типов?

кроме Стивен Сответ я хочу сказать: обработка исключений-относительно дорогая операция в Java. мы не должны ставить все исключительные ситуации в try/catch заблокировать. Чрезмерное использование try/catchs может препятствовать производительности программы.

в заключение Exceptions следует обрабатывать программно, когда это возможно. С другой стороны, мы не можем справиться.Errors, поэтому это могут быть некоторые логические причины, почему существует много типов исключений.


TofuBeer это!--5--> ясно объясняет, что означают классы исключений.

почему эти типы? Вместо этого Java может просто следовать простому дизайну (просто попробуйте/поймайте все типы) для обработки аномального состояния в программе?

почему? Потому что они необходимы! Без этих 4 классов обработка исключений по широкой категории была бы непрактичной.

  • как бы вы поймали "все фатальные ошибки JVM" без Error класса?
  • как бы вы поймали "все исключения, которые не являются фатальными ошибками JVM" без Exception класса?
  • как бы вы поймали "все непроверенные исключения" без RuntimeException класса?

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


  • ошибка (броски VM, не должны быть пойманы или обработаны)
    1. ошибка VM
    2. Ошибка Утверждения
    3. ошибка связи ...так далее
  • Runtime / Uncheck Exception (ошибка программирования, не должна быть поймана или обработана)
    1. NullPointerException
    2. ArrayIndexOutOfBoundException
    3. IllegalArgumentException ... т. д.
  • Проверить Исключение(Все Остальное, Приложения должны быть пойманы и обработаны)
    1. IOException
    2. FileNotFoundException
    3. SQLException ...так далее

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

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

сведения для запоминания:

[1] проверено исключение означает компилятор проверил исключения. Это означает, что компилятор требует, чтобы такое исключение обрабатывалось try-catch блокировать или выбрасывать ключевое слово.

[2] непроверенными исключениями являются те, для которых compiler не предоставляет никакого мандата поскольку они могут быть разрешены разработчиком путем кодирования / программирования, поскольку поток управления управляется, как в ArithmeticException ,NullPointerException ArrayIndexOutOfBoundsException, IllegalArgumentException и т. д.

Я называю это "Исключение-Идентификация-Тест" где вы берете любое случайное исключение из Java doc и просто спрашиваете его вопрос. "Эй Исключения! Можно ли решить программно?"

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

с другой стороны, если исключение говорит нет тогда это проверено исключение, как в проверенном потоке управления исключениями выходит из нашего кода, например, если кто-то меняет пароли базы данных или кто-то отключает сеть кабель, время ожидания соединения (ConnectException), некоторый ресурс не найден (FileNotFoundException, ClassNotFound), SQLException, InvocatonTargetException и т. д. Эти не могут быть решены программированием