java自定义异常需继承exception或runtimeexception,并在构造器中调用super(message)或super(message, cause)将错误信息传递给父类;否则detailmessage未初始化,getmessage()返回null。

Java 中自定义异常向父类传递错误信息,核心是调用父类(通常是 Exception 或 RuntimeException)的构造方法,并把错误信息作为参数传进去。
继承时显式调用父类带 String 参数的构造器
自定义异常类需继承 Exception(检查型)或 RuntimeException(非检查型),并在构造方法中用 super(message) 把错误信息交给父类处理:
示例:
public class InsufficientBalanceException extends Exception {
public InsufficientBalanceException(String message) {
super(message); // ✅ 关键:把 message 传给父类 Exception 的构造器
}
}
// 使用
throw new InsufficientBalanceException("账户余额不足,当前余额:50.0 元");
支持带 cause 的构造器(推荐补充)
实际开发中常需要保留原始异常(比如底层 IO 异常导致业务异常),建议额外提供接收 Throwable cause 的构造器,并调用 super(message, cause):
- 让异常链完整,便于排查根因
- 父类会自动保存 cause,调用
getCause()可获取
补充构造器写法:
public InsufficientBalanceException(String message, Throwable cause) {
super(message, cause); // ✅ 同时传递消息和原始异常
}
避免常见错误
- 不调用
super(...):会导致父类字段(如 detailMessage)未初始化,getMessage()返回 null 或空字符串 - 只重写无参构造器:丢失错误信息,失去可读性
- 在构造器里自己存 message 字段再忽略 super:多余且破坏异常机制(父类已负责存储和展示)
验证是否生效
抛出后可通过以下方式确认信息已正确传递:
-
e.getMessage()→ 返回你传入的字符串 -
e.toString()→ 显示类名 + “: ” + 消息 -
e.printStackTrace()→ 完整堆栈,含消息和可选 cause
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











