В чем разница между checked и unchecked исключениями

Исключения (exceptions) важная часть обработки ошибок. Есть две основные категории: проверяемые (checked) и непроверяемые (unchecked).

Проверяемые исключения (Checked Exceptions):

  • Должны быть явно обработаны в коде с помощью блока `try-catch` или должны быть указаны в сигнатуре метода с помощью ключевого слова `throws`
  • Они представляют ошибки, которые могут возникнуть во время выполнения программы и которые во многих случаях программист может предвидеть и обработать. Например, ошибка чтения файла, когда файл не существует.
  • Примеры классов проверяемых исключений включают `IOException`, `FileNotFoundException`, `ClassNotFoundException` и другие.

Пример:

try {
    FileInputStream file = new FileInputStream("non_existent_file.txt");
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

В этом примере `FileNotFoundException` является проверяемым исключением, и его необходимо обрабатывать в блоке `try-catch`.

Непроверяемые исключения (Unchecked Exceptions):

  • Не требуют обязательной обработки в коде. Они обычно возникают из-за ошибок программирования, таких как деление на ноль или доступ к элементу за пределами массива.
  • К ним относятся ошибки времени выполнения (RuntimeException) и ошибки (Error). 
  • Примеры включают `NullPointerException`, `IndexOutOfBoundsException`, `ArithmeticException` и другие.

Пример:

int result = 10 / 0; // Приводит к ArithmeticException

Здесь `ArithmeticException` является непроверяемым исключением, вызванным делением на ноль.

Почему разделение на checked и unchecked?
Разделение позволяет управлять потенциальными ошибками, которые могут быть исправлены, и отличать их от ошибок времени выполнения, которые чаще всего являются результатом ошибок в коде. Это способствует написанию более надежного и устойчивого к ошибкам кода.

Feb. 22, 2024, easyoffer

В Java все исключения делятся на два типа:

  • checked (контролируемые/проверяемые исключения) должны обрабатываться блоком catch или описываться в заголовке метода (например, throws IOException). Наличие такого обработчика/модификатора в заголовке метода проверяется на этапе компиляции;
  • unchecked (неконтролируемые/непроверяемые исключения), к которым относятся ошибки Error (например, OutOfMemoryError), обрабатывать которые не рекомендуется и исключения времени выполнения, представленные классом RuntimeException и его наследниками (например, NullPointerException), которые могут не обрабатываться блоком catch и не быть описанными в заголовке метода.

Oct. 21, 2023, Источник