在Java自定义异常类中应添加final修饰的errorCode字段并提供getter方法,推荐结合枚举统一管理错误码以提升可维护性,业务异常通常继承RuntimeException。

在 Java 中自定义异常类时,添加 errorCode 属性字段非常常见,尤其在需要区分业务错误类型、对接前端或日志追踪时。核心做法是:在自定义异常类中声明一个私有字段(如 private final String errorCode; 或 private final int errorCode;),并在构造方法中初始化它,同时提供对应的 getter 方法。
定义 errorCode 字段与构造方法
推荐使用 final 修饰,确保错误码不可变;类型根据实际需要选 String(如 "USER_NOT_FOUND")或 int(如 1001)。示例:
- public class BusinessException extends RuntimeException {
- private final String errorCode;
- private final Object[] args;
- public BusinessException(String errorCode, String message) {
- super(message);
- this.errorCode = errorCode;
- this.args = new Object[0];
- }
- public BusinessException(String errorCode, String message, Object... args) {
- super(String.format(message, args));
- this.errorCode = errorCode;
- this.args = args;
- }
- public String getErrorCode() { return errorCode; }
- public Object[] getArgs() { return args; }
- }
配合枚举统一管理错误码(更推荐)
避免散落的字符串/数字,用枚举集中定义错误码和默认消息,提升可维护性:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- public enum ErrorCode {
- USER_NOT_FOUND("USER_001", "用户不存在"),
- INVALID_PARAM("PARAM_002", "参数不合法");
- private final String code;
- private final String defaultMessage;
- ErrorCode(String code, String defaultMessage) {
- this.code = code;
- this.defaultMessage = defaultMessage;
- }
- public String getCode() { return code; }
- public String getDefaultMessage() { return defaultMessage; }
- }
然后在异常类中接收枚举实例,自动获取 code 和 message:
立即学习“Java免费学习笔记(深入)”;
- public BusinessException(ErrorCode errorCode) {
- super(errorCode.getDefaultMessage());
- this.errorCode = errorCode.getCode();
- }
使用场景与注意事项
- 抛出时直接传入: throw new BusinessException("AUTH_001", "登录已过期");
- 全局异常处理器(如
@ControllerAdvice)中可通过exception.getErrorCode()提取并返回给前端 - 若需支持国际化,可将
errorCode作为资源键,由 i18n 工具动态解析消息 - 不建议把
errorCode设为 public 或提供 setter —— 错误码应在抛出时确定,不应被修改
补充:继承 RuntimeException 还是 Exception?
业务异常一般继承 RuntimeException,避免强制 try-catch;若需编译期强制处理(如支付失败必须重试),则继承 Exception 并保持 errorCode 设计逻辑一致。

















