Java自定义异常需继承Exception或RuntimeException,重写无参和String message构造方法,并可选添加cause相关构造器,以支持灵活抛出、信息携带与根因追踪。

Java 中自定义异常类时,重写无参构造方法和带 message 的构造方法,是为了让异常对象既能被默认创建,也能携带可读的错误信息。这是规范做法,也是调用方能友好捕获和处理异常的基础。
继承合适的异常父类
先确定是检查型异常(继承 Exception)还是运行时异常(继承 RuntimeException)。大多数自定义业务异常推荐继承 RuntimeException,避免强制 try-catch:
- 若需编译期强制处理(如 IO、校验失败必须响应),继承
Exception - 若属程序逻辑错误(如参数非法、状态不合法),继承
RuntimeException
重写两个关键构造方法
必须显式提供无参构造器和 String message 构造器,否则子类无法直接使用 throw new MyException() 或 throw new MyException("xxx"):
- 无参构造:调用父类无参构造,便于简单抛出
-
String message构造:调用父类对应构造,把消息传给 JVM 异常机制
示例代码:
立即学习“Java免费学习笔记(深入)”;
public class BusinessException extends RuntimeException {
public BusinessException() {
super();
}
public BusinessException(String message) {
super(message);
}
}
可选:补充 cause 和 message+cause 构造器
实际开发中常需要包装底层异常(如数据库异常转业务异常),建议再添加两个构造器:
-
BusinessException(Throwable cause):只传异常原因 -
BusinessException(String message, Throwable cause):同时带提示消息和原始异常
这样能保留堆栈和根因,方便日志追踪和调试。
使用时注意调用链清晰
抛出自定义异常时,尽量给出明确 message;捕获后可通过 e.getMessage() 获取,也可用 e.getCause() 拿到原始异常:
- 不要忽略或吞掉异常,尤其在包装时别丢掉 cause
- message 避免空字符串或纯占位符(如 "error"),应说明具体问题


















