自定义异常通过继承Exception或RuntimeException实现,能精准表达业务规则违反情况;2. 在业务逻辑如转账校验中,若金额为空或小于等于零,抛出含错误码和消息的BusinessException,提升可读性与维护性。

在Java开发中,抛出自定义异常是实现业务校验的重要手段。它能让程序更清晰地表达业务规则的违反情况,提升代码可读性和维护性。直接使用系统异常(如IllegalArgumentException)虽然可行,但无法准确描述具体业务问题。通过自定义异常,可以精准反馈错误类型和信息,便于前端处理或日志追踪。
定义自定义异常类
自定义异常通常继承Exception或RuntimeException。若希望调用方强制处理,继承Exception;若为运行时异常,继承RuntimeException。
public class BusinessException extends RuntimeException { private String code; public BusinessException(String message) { super(message); } public BusinessException(String code, String message) { super(message); this.code = code; } // getter方法 public String getCode() { return code; }}
在业务逻辑中抛出异常
在校验用户输入或业务规则时,一旦发现不满足条件,立即抛出对应异常。
public void transferMoney(String fromUser, String toUser, BigDecimal amount) { if (amount == null || amount.compareTo(BigDecimal.ZERO) throw new BusinessException("INVALID_AMOUNT", "转账金额必须大于0"); } if (!userExists(fromUser)) { throw new BusinessException("USER_NOT_FOUND", "用户不存在:" + fromUser); } // 其他逻辑...}
统一异常处理(推荐搭配Spring使用)
在Web项目中,可通过@ControllerAdvice捕获自定义异常,返回结构化错误响应。
立即学习“Java免费学习笔记(深入)”;
@ControllerAdvicepublic class GlobalExceptionHandler { @ResponseBody @ExceptionHandler(BusinessException.class) public Map Map result.put("success", false); result.put("code", e.getCode()); result.put("message", e.getMessage()); return result; }}
这样前端收到的响应始终是统一格式,便于解析处理。
最佳实践建议
使用自定义异常时注意以下几点:
- 异常类名应体现业务含义,如
UserNotFoundException、OrderStatusException - 提供错误码(code)便于国际化或多语言处理
- 避免暴露敏感信息在异常消息中
- 结合日志记录,确保异常可追溯
- 不要用异常控制正常流程,仅用于“异常”场景
基本上就这些。合理使用自定义异常,能让业务校验更清晰,系统更健壮。










