Является ли класс Throwable контролируемым исключением в Java?

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

Ответ

Нет. Throwable — это базовый класс для всех исключений и ошибок в Java. Он делится на два основных подкласса:

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

Примеры:

// Контролируемое исключение (Checked) - требует обработки
try {
    Files.readAllBytes(Paths.get("file.txt"));
} catch (IOException e) { // Обязательный блок catch или throws
    e.printStackTrace();
}

// Неконтролируемое исключение (Unchecked) - не требует объявления
throw new RuntimeException("Что-то пошло не так");

Таким образом, Throwable сам по себе не является контролируемым исключением — это общий корень иерархии.