Что представляет собой класс Exception в Java и какова его иерархия наследования?

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

Ответ

В Java java.lang.Exception — это базовый класс для всех checked (проверяемых) исключений. Он напрямую наследует от java.lang.Throwable.

Иерархия: ObjectThrowableException → ... (пользовательские checked-исключения, IOException, SQLException и т.д.)

Ключевые характеристики Exception:

  • Checked исключение: Компилятор требует обязательной обработки таких исключений либо через блок try-catch, либо через объявление в сигнатуре метода с помощью throws.
  • Предназначение: Обработка ожидаемых ошибок, от которых программа может восстановиться (например, отсутствие файла, проблемы с сетью, некорректный ввод).

Пример объявления класса Exception (упрощенно):

public class Exception extends Throwable {
    public Exception() {}
    public Exception(String message) { super(message); }
    public Exception(String message, Throwable cause) { super(message, cause); }
    // ... другие конструкторы и методы
}

Создание пользовательского checked-исключения:

// Наследуемся от Exception, чтобы создать проверяемое исключение
class ValidationException extends Exception {
    public ValidationException(String errorMessage) {
        super(errorMessage);
    }
}

// Использование
public void processUser(String name) throws ValidationException {
    if (name == null || name.isBlank()) {
        throw new ValidationException("Name cannot be empty");
    }
    // ... логика
}

Важное отличие: Класс RuntimeException (и его наследники, например, NullPointerException, IllegalArgumentException) также наследует от Exception, но является unchecked (непроверяемым) исключением. Компилятор не требует его обязательной обработки.