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

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

Ответ

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

  • Error: Представляет критические, невосстанавливаемые ошибки времени выполнения (например, OutOfMemoryError, StackOverflowError). Обычно их не перехватывают.
  • Exception: Базовый класс для исключительных ситуаций, которые программа может обработать. Включает проверяемые (checked, например, IOException) и непроверяемые (unchecked, например, RuntimeException) исключения.

Почему Throwable — главный? Все исключения наследуют его методы, что обеспечивает единый интерфейс для обработки:

try {
    // Код, который может выбросить исключение
    int result = 10 / 0;
} catch (ArithmeticException e) { // ArithmeticException наследуется от Throwable
    // Используем методы Throwable
    System.out.println("Сообщение: " + e.getMessage());
    System.out.println("Причина: " + e.getCause());
    e.printStackTrace(); // Вывод трассировки стека
}

Ключевые методы Throwable:

  • String getMessage() – возвращает детальное сообщение об ошибке.
  • void printStackTrace() – печатает трассировку стека в стандартный поток ошибок.
  • Throwable getCause() – возвращает исключение-причину (если есть).