1. 异常继承体系的核心设计逻辑
Java异常处理机制的本质是对程序非正常状态的分类管理。所有异常都继承自Throwable类,其下分为Error和Exception两大分支。Error表示JVM层面的严重问题(如OutOfMemoryError),而Exception才是我们业务开发中需要处理的异常类型。
在Exception体系中,RuntimeException及其子类属于非受检异常(Unchecked Exception),其他Exception子类则是受检异常(Checked Exception)。这种区分不是随意的,而是基于异常的可恢复性设计的:
- 受检异常:调用方必须处理的预期异常(如IOException)
- 非受检异常:通常表示编程错误(如NullPointerException)
关键设计原则:如果调用者能够合理地预期某种异常并采取恢复措施,就使用Checked Exception;如果异常表示程序错误(如参数校验失败),则使用RuntimeException。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 自定义异常的典型应用场景
2.1 业务规则校验异常
电商系统中的库存不足异常(InsufficientStockException)应该继承RuntimeException。因为:
- 调用方通常无法从这种错误中恢复
- 这是参数校验的延伸(相当于前置校验没做好)
- 强制捕获处理会增加无意义的代码复杂度
java复制public class InsufficientStockException extends RuntimeException {
private final String sku;
private final int requested;
private final int available;
// 构造器包含完整的错误上下文信息
public InsufficientStockException(String sku, int requested, int available) {
super(String.format("SKU %s 库存不足 (请求%d件,实际%d件)", sku, requested, available));
