java中定义带错误码的自定义异常应继承runtimeexception,提供含int型错误码和message的构造方法并实现getcode();推荐用枚举统一管理错误码以提升类型安全与可维护性。

在 Java 中编写带错误码的自定义异常,核心是定义一个包含错误码(如 int 或 String 类型)和错误消息的构造方法,并通常继承 RuntimeException(运行时异常)或 Exception(检查型异常)。
定义带错误码的自定义异常类
推荐继承 RuntimeException,避免强制 try-catch;若需编译期强制处理,可继承 Exception。关键点:提供含错误码和 message 的构造方法,并调用父类构造器初始化消息。
- 错误码建议用
int或枚举(更类型安全),message 用于描述性信息 - 保留无参构造和仅含 message 的构造,保持灵活性
- 可在类中添加
getCode()方法方便外部获取错误码
示例代码(推荐写法)
以下是一个典型实现:
public class BizException extends RuntimeException {
private final int code;
// 仅错误码
public BizException(int code) {
this(code, "未知错误");
}
// 错误码 + 消息
public BizException(int code, String message) {
super(message);
this.code = code;
}
// 错误码 + 消息 + 异常原因(支持链式异常)
public BizException(int code, String message, Throwable cause) {
super(message, cause);
this.code = code;
}
// 提供获取错误码的方法
public int getCode() {
return code;
}
}
使用方式与注意事项
抛出时直接传入业务相关的错误码和提示,捕获后可统一处理(如日志记录、HTTP 响应封装):
-
抛出:
throw new BizException(5001, "用户不存在"); -
捕获并提取:
ex.getCode()和ex.getMessage()可分别获取结构化错误码与可读信息 - 若错误码较多,建议用 枚举类 管理(如
ErrorCode.USER_NOT_FOUND),避免魔法数字
进阶:用枚举统一管理错误码
更健壮的做法是将错误码定义为枚举,自带 message 和 code,提升可维护性:
public enum ErrorCode {
USER_NOT_FOUND(40001, "用户不存在"),
PARAM_INVALID(40002, "参数不合法");
private final int code;
private final String message;
ErrorCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() { return code; }
public String getMessage() { return message; }
}
// 自定义异常可简化为:
public class BizException extends RuntimeException {
private final int code;
public BizException(ErrorCode errorCode) {
super(errorCode.getMessage());
this.code = errorCode.getCode();
}
public int getCode() { return code; }
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











