java自定义异常需继承exception或其子类并显式定义构造方法,关键要调用super()完成父类初始化;推荐补全无参、message、cause、message+cause四个构造方法以保证兼容性。

Java 中自定义异常类时,若想支持带参数的构造方法(比如传入错误消息、错误码、嵌套异常等),只需继承 Exception 或其子类(如 RuntimeException),并显式定义所需构造方法即可。关键是要**调用父类对应构造方法完成初始化**,否则编译报错。
基础写法:支持 message 的构造方法
最常见的是传入字符串消息,需调用父类 super(message):
public class UserNotFoundException extends Exception {
public UserNotFoundException(String message) {
super(message); // 将 message 传递给 Exception 的构造方法
}
}
使用示例:
throw new UserNotFoundException("用户 ID 为 1001 的用户不存在");
进阶写法:支持 cause(嵌套异常)
当需要封装底层异常(如数据库异常、网络异常)时,可提供接收 Throwable 的构造方法:
- 调用
super(message, cause)同时传入消息和原因 - 或只传
cause,调用super(cause)
public class ServiceException extends Exception {
public ServiceException(String message, Throwable cause) {
super(message, cause);
}
public ServiceException(Throwable cause) {
super(cause);
}
}
这样能保留原始异常栈信息,便于排查问题。
扩展写法:支持业务字段(如 errorCode)
可在自定义异常中添加字段,并在构造方法中赋值。注意:这些字段不参与异常链机制,仅用于业务逻辑处理:
public class BusinessException extends Exception {
private final int errorCode;
public BusinessException(int errorCode, String message) {
super(message);
this.errorCode = errorCode;
}
public int getErrorCode() {
return errorCode;
}
}
使用时可获取错误码:
try {
throw new BusinessException(5001, "库存不足");
} catch (BusinessException e) {
System.out.println("错误码:" + e.getErrorCode());
}
推荐实践:覆盖全部常用构造方法
为保持与标准异常一致的兼容性(如被框架捕获时能正常反序列化),建议同时提供以下四个构造方法:
- 无参构造:
super() - 仅 message:
super(message) - 仅 cause:
super(cause) - message + cause:
super(message, cause)
这是 Exception 类本身的构造方法签名,补全后更健壮、更规范。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











