Какова корневая иерархия исключений в Java?

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

Ответ

Корневым классом всей иерархии исключений в Java является Throwable. От него наследуются два основных класса:

  1. Error — представляет критические системные ошибки (например, OutOfMemoryError, StackOverflowError), которые обычно не обрабатываются в прикладном коде.
  2. Exception — базовый класс для исключительных ситуаций, с которыми может столкнуться программа. От него, в свою очередь, наследуются:
    • Проверяемые исключения (checked), такие как IOException. Они должны быть либо обработаны в блоке try-catch, либо объявлены в сигнатуре метода с помощью throws.
    • Непроверяемые исключения (unchecked)RuntimeException и его подклассы (например, NullPointerException, IllegalArgumentException). Их обработка не является обязательной для компилятора.

Пример обработки:

try {
    // Код, который может выбросить исключение
    FileInputStream fis = new FileInputStream("file.txt");
} catch (FileNotFoundException e) { // Обработка проверяемого исключения
    System.err.println("Файл не найден: " + e.getMessage());
} catch (RuntimeException e) { // Обработка непроверяемого исключения
    System.err.println("Ошибка времени выполнения: " + e);
}