自定义受检异常必须继承Exception或其子类,编译器强制处理;需声明为public class XxxException extends Exception,并实现四种标准构造方法;使用时须throws声明或try-catch捕获,命名应语义清晰、以Exception结尾。

自定义受检异常(checked exception)必须继承 Exception 或其子类(不能继承 RuntimeException),且编译器会强制调用方处理它(捕获或声明抛出)。
基本语法结构
最简形式包含:一个继承 Exception 的类、至少一个构造方法(推荐提供全部四种标准构造方式)。
- 类需用
public class XxxException extends Exception声明 - 建议实现所有父类常用构造方法:无参、
String message、Throwable cause、String message, Throwable cause - 无需重写任何方法,但完整构造支持能让异常行为更规范
标准写法示例
以下是一个典型可直接复用的模板:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
public class InsufficientBalanceException extends Exception {
public InsufficientBalanceException() {
super();
}
public InsufficientBalanceException(String message) {
super(message);
}
public InsufficientBalanceException(Throwable cause) {
super(cause);
}
public InsufficientBalanceException(String message, Throwable cause) {
super(message, cause);
}
}
使用时的关键约束
声明和抛出该异常时,Java 编译器会强制干预:
立即学习“Java免费学习笔记(深入)”;
- 方法签名中必须用
throws InsufficientBalanceException声明(若未捕获) - 调用处必须用
try-catch捕获,或继续向上throws - 若在 lambda 表达式或函数式接口中抛出,需包装或改用不受检异常(因函数式接口通常不声明受检异常)
命名与设计建议
让异常语义清晰、便于定位问题:
- 类名以
Exception结尾,如InvalidEmailException、FileLockedException - 消息字符串应说明“发生了什么”+“可能原因”,例如
"余额不足:当前余额 100.0,需 200.0" - 避免泛化名称(如
MyException),也不要在异常中封装业务逻辑

















