На какие основные категории делится иерархия исключений в Java?

«На какие основные категории делится иерархия исключений в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Иерархия исключений Java делится на три основные категории, различающиеся по типу проверки и серьезности:

Категория Классы-родители Проверка Когда использовать Примеры
Checked (Проверяемые) Exception (кроме RuntimeException) Да (обязательная обработка) Восстановимые ошибки, которые программа может обработать. IOException, SQLException, ClassNotFoundException
Unchecked (Непроверяемые) RuntimeException и его наследники Нет Ошибки программирования, логические ошибки в коде. NullPointerException, IllegalArgumentException, ArrayIndexOutOfBoundsException
Ошибки (Errors) Error и его наследники Нет (обычно не обрабатываются) Критические системные сбои, от которых программа не может восстановиться. OutOfMemoryError, StackOverflowError, VirtualMachineError

Примеры кода:

// 1. Checked Exception (требует обработки)
try {
    FileReader file = new FileReader("test.txt");
} catch (FileNotFoundException e) { // ОБЯЗАТЕЛЬНЫЙ блок catch
    System.out.println("Файл не найден: " + e.getMessage());
}

// 2. Unchecked Exception (обработка не обязательна)
String text = null;
// System.out.println(text.length()); // Выбросит NullPointerException

// 3. Error (обычно не перехватывается)
// throw new OutOfMemoryError(); // Приведет к аварийному завершению JVM