自定义异常类必须继承Exception或RuntimeException;继承Exception为检查型异常,调用处须处理;继承RuntimeException为非检查型异常,编译器不强制处理。
自定义异常类必须继承 Exception 或 RuntimeException
Java 中没有“声明即可用”的自定义异常,必须显式定义一个类。关键区别在于:继承 Exception 是检查型异常(checked),调用处必须 try-catch 或声明 throws;继承 RuntimeException 是非检查型异常(unchecked),编译器不强制处理。
常见误写是直接 throw new Exception("msg") 试图模拟自定义行为——这仍是通用 Exception,无法体现业务语义,也不便于上层精确捕获。
正确做法:
public class InsufficientBalanceException extends RuntimeException {
public InsufficientBalanceException(String message) {
super(message);
}
// 可选:带 cause 构造器,方便链式异常追踪
public InsufficientBalanceException(String message, Throwable cause) {
super(message, cause);
}
}
抛出时用 throw,不是 throws
throws 是方法签名的一部分,用于声明可能抛出的异常类型;throw 才是实际触发异常的动作。新手常混淆二者,比如在方法体内写 throws new IllegalArgumentException() —— 这会编译报错。
立即学习“Java免费学习笔记(深入)”;
正确写法示例: