Ответ
Наследование от java.lang.Exception создает проверяемое исключение (checked exception).
Особенности проверяемых исключений:
- Компилятор требует их обработки.
- Метод должен либо объявить такое исключение в
throws-клаузе, либо обработать его в блокеtry-catch. - Используются для ошибок, от которых программа может разумно восстановиться (например,
FileNotFoundException,SQLException).
Пример создания пользовательского проверяемого исключения:
// 1. Объявление исключения.
class InsufficientFundsException extends Exception {
public InsufficientFundsException(String message) {
super(message);
}
}
// 2. Использование в методе.
class BankAccount {
void withdraw(double amount) throws InsufficientFundsException {
if (amount > balance) {
throw new InsufficientFundsException("Недостаточно средств.");
}
balance -= amount;
}
}
// 3. Обработка исключения (обязательна).
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount();
try {
account.withdraw(1000);
} catch (InsufficientFundsException e) {
System.err.println("Ошибка: " + e.getMessage());
// Логика восстановления: предложить другую сумму.
}
}
}
Важное отличие: Класс RuntimeException (и все его наследники, например, NullPointerException) также наследуется от Exception, но представляет непроверяемые исключения. Их обработка компилятором не требуется.