自定义异常需继承Exception(检查型)或RuntimeException(非检查型);检查型异常强制处理,适用于文件不存在等可恢复场景,需提供无参、String、Throwable及完整构造方法;非检查型异常用于逻辑错误,业务异常推荐检查型。
在Java中,自定义异常类需要继承 Exception 或其子类(如 RuntimeException),核心是明确异常类型(检查型/非检查型)并提供合适的构造方法。
继承 Exception 类创建的异常属于检查型异常(Checked Exception),编译器强制要求调用方处理(try-catch 或 throws)。适合表示可预期、应主动恢复的异常场景,如文件不存在、网络超时等。
推荐做法:
super(message))示例:
public class InsufficientBalanceException extends Exception {
blic InsufficientBalanceException(String message) {若希望异常不强制处理,应继承 RuntimeException(它本身继承自 Exception)。这类异常属于非检查型异常(Unchecked Exception),常用于程序逻辑错误,如空指针、数组越界、自定义业务逻辑异常(如参数非法)。
注意:不要滥用非检查型异常掩盖本该显式处理的问题;业务层面的“异常状态”(如余额不足)更推荐用检查型异常,以保障调用方感知和处理。
Java 异常体系根类是 Throwable,分为两大分支:
自定义异常时,继承位置决定其是否受编译检查——只要不是 RuntimeException 的子孙类,就是检查型异常。
实际开发中需注意:
toString() 或增加业务字段(如错误码、时间戳),但需保持序列化兼容性