Ответ
Да, можно. Для этого класс исключения должен наследоваться от 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 в обязательный аргумент, нарушение контракта метода, ошибки в логике).