Java自定义异常需继承Exception或RuntimeException,提供无参、String message、String message+Throwable cause三种构造方法,并可扩展业务字段与getter方法。

在Java中自定义异常类,核心是继承 Exception(检查型异常)或 RuntimeException(非检查型异常),并通常提供几个标准构造方法,让调用方能灵活传入异常信息和原因。
继承合适的父类
根据异常是否需要强制处理来选择基类:
- 若希望调用方必须用 try-catch 或 throws 处理(如业务校验失败必须拦截),继承 Exception
- 若属于程序逻辑错误、无需强制捕获(如参数非法、状态不一致),继承 RuntimeException
提供常用构造方法
建议至少实现以下三种构造方式,覆盖常见使用场景:
- 无参构造:方便快速抛出默认消息的异常
- 带 String message 的构造:支持传入自定义提示语
- 带 message 和 cause 的构造:可包装底层异常,保留原始堆栈信息
例如:
立即学习“Java免费学习笔记(深入)”;
public class InsufficientBalanceException extends Exception {public InsufficientBalanceException() {
super("账户余额不足");
}
public InsufficientBalanceException(String message) {
super(message);
}
public InsufficientBalanceException(String message, Throwable cause) {
super(message, cause);
}
}
可选:添加业务相关字段与方法
如果异常需携带上下文数据(如错误码、订单ID、金额等),可在类中定义私有字段,并在构造时初始化,再提供 getter 方法供上层提取:
- 比如增加 errorCode: String 和 orderId: Long
- 重写 toString() 或新增 toLogMessage() 方便日志输出
使用时注意抛出与捕获方式
自定义检查型异常(继承 Exception)必须显式处理;而继承 RuntimeException 的则可直接 throw,无需声明 throws:
- throw new InsufficientBalanceException("转账失败", ex);
- catch (InsufficientBalanceException e) { log.warn(e.getMessage(), e); }
不复杂但容易忽略。










