Как создать собственное проверяемое исключение (checked exception) в Java?

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

Ответ

Да, можно. Для этого класс исключения должен наследоваться от java.lang.Exception (но не от RuntimeException). Компилятор будет требовать его обработки (через try-catch) или объявления в throws.

Пример создания и использования:

// 1. Объявление проверяемого исключения
class PaymentFailedException extends Exception {
    // Конструкторы для передачи сообщения и причины
    public PaymentFailedException(String message) {
        super(message);
    }
    public PaymentFailedException(String message, Throwable cause) {
        super(message, cause);
    }
}

// 2. Использование в методе (обязательно объявить в throws)
class PaymentService {
    public void processPayment(double amount) throws PaymentFailedException {
        if (amount <= 0) {
            // Выбрасываем исключение — вызывающий код должен его обработать
            throw new PaymentFailedException("Invalid amount: " + amount);
        }
        // Логика оплаты...
    }
}

// 3. Обработка исключения в вызывающем коде
class Main {
    public static void main(String[] args) {
        PaymentService service = new PaymentService();
        try {
            service.processPayment(-100);
        } catch (PaymentFailedException e) {
            System.err.println("Payment error: " + e.getMessage());
            // Восстановление после ошибки
        }
    }
}

Когда использовать: Для ошибок, которые являются восстановимыми, и вы хотите обязать вызывающий код явно их обработать (например, ошибки ввода, сетевые сбои, бизнес-логика).