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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

Ошибка:

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

Почему эти много типов?

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

В заключение, Exception следует обрабатывать программно, когда это возможно. С другой стороны, мы не можем обработать Error s, так что это может быть несколько логических причин, по которым существует много типов исключений.

Ответ 3

Ответ TofuBeer четко объясняет, что означают классы исключений.

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

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

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

Ответ 4

  • Ошибка (бросает VM, не должна быть поймана или обработана)
    • Ошибка VM
    • Ошибка подтверждения
    • Ошибка связи... так далее
  • Runtime/Uncheck Exception (ошибка программирования, не следует улавливать или обрабатывать)
    • NullPointerException
    • ArrayIndexOutOfBoundException
    • IllegalArgumentException... и так далее
  • Check Exception (Anything Else, ожидается, что приложения будут пойманы или обработаны)
    • IOException
    • FileNotFoundException
    • SQLException... и так далее

Ответ 5

Исключения Runtime обеспечивают гибкость во избежание ловить, объявляя исключения.

Ответ 6

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

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

Следует помнить следующее:

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

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

Я называю это "Exception-Identity-Test", где вы берете любое случайное исключение из java doc и просто задаете ему один вопрос. "Эй, исключение! Вы можете быть решены программно?"

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

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

Ответ 7

В этой статье кратко и кратко излагаются отмеченные и непроверенные исключения.

  • Проверенные исключения: отмеченные исключения - это исключения, которые могут быть обнаружены, идентифицированы и проверены во время компиляции. Если блок кода выдает проверенное исключение, метод должен обработать исключение или указать исключение с помощью ключевого слова throws.

    • Пример:

      public void testDB() throws ClassNotFoundException, SQLException
      {
          Class.forName("com.mysql.jdbc.Driver");
          System.out.println("Driver Loaded");
          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/selenium","root","root");
          System.out.println("Connected to MySQL DB");
      }
      
    • Нам нужно либо указать список исключений с помощью throws, либо нам нужно использовать блок try-catch{}. Я продемонстрировал использование throws в приведенной ниже программе.

  • Непроверенные исключения: непроверенные исключения не проверяются во время компиляции. Исключения Java в классах Error и RuntimeException являются непроверенными исключениями, а все остальное в throwable проверяется.

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

Ответ 8

На рисунке ниже показана иерархия классов исключений. Базовым классом для всех объектов Exception является java.lang.Throwable вместе с двумя его подклассами java.lang.Exception и java.lang.Error.

enter image description here

  • Класс Error описывает внутренние системные ошибки (например, VirtualMachineError, LinkageError), которые возникают редко. Если возникает такая ошибка, вы мало что можете сделать, и программа будет остановлена во время выполнения Java.

  • Класс Exception описывает ошибку, вызванную вашей программой (например, FileNotFoundException, IOException). Эти ошибки могут быть перехвачены и обработаны вашей программой (например, выполнить альтернативное действие или выполнить корректный выход, закрыв все файлы, подключения к сети и базе данных).

Проверено против Не проверено

Как показано, подклассы Error и RuntimeException известны как непроверенные исключения. Эти исключения не проверяются компилятором и, следовательно, не должны быть перехвачены или объявлены как выброшенные в вашей программе. Это потому, что с этими исключениями мало что можно сделать. Например, "деление на 0" запускает ArithmeticException, индекс массива вне границы запускает ArrayIndexOutOfBoundException, которые действительно программируют логические ошибки, которые должны быть исправлены во время компиляции, вместо того, чтобы оставить его во время выполнения обработка исключений.

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

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

Источник здесь

Ответ 9

Exceptions are two types in java:

1. **Checked Exception: The exceptions which are checked by compiler. 

Например: если вы выполняете операцию с файлом, то компилятор попросит вас обработать IOException либо с помощью блока try-catch, либо с помощью ключевого слова throws.

2. Unchecked Exception: The exceptions which are not checked by compiler at run time. 

Например: если вы выполняете операцию над объектом, не создавая его; в этом случае вы получите NullPointerException.