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

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

Ответ

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

Иерархия:

            Throwable
            /       
     Error          Exception
                    /         
    RuntimeException      Checked Exceptions (e.g., IOException)

Ключевые подклассы Throwable:

  • Error — указывает на серьезные проблемы, с которыми приложение обычно не должно пытаться справиться (например, OutOfMemoryError, StackOverflowError).
  • Exception — базовый класс для проблем, которые разумная программа может захотеть перехватить.
    • RuntimeException (Unchecked) — исключения, которые не обязаны быть объявлены или перехвачены (например, NullPointerException, IllegalArgumentException).
    • Checked Exceptions — исключения, которые должны быть либо объявлены в сигнатуре метода (throws), либо обработаны в блоке try-catch (например, IOException, SQLException).

Важные методы класса Throwable:

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

Пример:

try {
    throw new IllegalArgumentException("Неверный аргумент");
} catch (RuntimeException e) { // Ловим unchecked исключение
    System.out.println(e.getMessage()); // "Неверный аргумент"
    // e.getCause() вернет null, так как причина не задана
}