推荐自定义运行时异常InsufficientBalanceException处理余额不足:1.继承RuntimeException避免强制捕获;2.扣款前校验并抛出带余额信息的异常;3.在Web层捕获返回400响应并记录日志;4.可扩展错误码和余额字段。

当账户余额不足时,Java 中推荐自定义一个运行时异常(如 InsufficientBalanceException),在扣款逻辑中主动检查余额并抛出,让调用方清晰感知业务错误。
1. 定义自定义异常类
继承 RuntimeException,使其为非检查异常(无需强制 try-catch 或 throws),更符合业务异常语义:
public class InsufficientBalanceException extends RuntimeException {
public InsufficientBalanceException() {
super("账户余额不足");
}
public InsufficientBalanceException(String message) {
super(message);
}
public InsufficientBalanceException(String message, Throwable cause) {
super(message, cause);
}
}
2. 在账户扣款方法中检查并抛出
在执行扣款前判断余额是否足够,不满足则立即抛出异常:
public void withdraw(double amount) {
if (amount this.balance) {
throw new InsufficientBalanceException(
String.format("余额不足:当前 %.2f,需 %.2f", this.balance, amount)
);
}
this.balance -= amount;
}
3. 调用时合理处理异常
虽然不是强制捕获,但建议在关键业务层(如服务方法、控制器)中捕获并做统一响应或日志记录:
- Web 层可捕获后返回友好提示(如 HTTP 400 + JSON 错误信息)
- 日志中记录异常堆栈,便于排查高频失败场景
- 避免在 catch 块中“吞掉”异常(即空 catch)
4. 可选增强:支持错误码和余额信息
若系统需要结构化错误响应,可在异常中添加字段:
public class InsufficientBalanceException extends RuntimeException {
private final double currentBalance;
private final double requiredAmount;
public InsufficientBalanceException(double currentBalance, double requiredAmount) {
super(String.format("余额不足:%.2f
这样调用方可通过异常对象获取具体数值,用于前端展示“还差 XX 元”等提示。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











