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

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

Ответ

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

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

// 1. Объявление непроверяемого исключения
class InsufficientFundsException extends RuntimeException {
    public InsufficientFundsException(String message) {
        super(message);
    }
    public InsufficientFundsException(String message, Throwable cause) {
        super(message, cause);
    }
}

// 2. Использование в методе (объявление throws НЕ обязательно)
class BankAccount {
    private double balance;

    public void withdraw(double amount) {
        if (amount > balance) {
            // Просто выбрасываем исключение
            throw new InsufficientFundsException(
                "Requested: " + amount + ", available: " + balance
            );
        }
        balance -= amount;
    }
}

// 3. Обработка — опциональна, но рекомендуется
class Main {
    public static void main(String[] args) {
        BankAccount account = new BankAccount();
        try {
            account.withdraw(1000);
        } catch (InsufficientFundsException e) {
            System.err.println("Operation failed: " + e.getMessage());
        }
    }
}

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