method.getexceptiontypes()返回方法声明的受检异常类型数组,仅含throws子句中的exception子类(不含runtimeexception/error),无声明时返回空数组,顺序与源码一致。

Method.getExceptionTypes() 是 Java 反射 API 中用于获取**方法声明中显式抛出的受检异常(checked exceptions)类型数组**的方法。它只返回 throws 子句中列出的异常类,不包括运行时异常(RuntimeException 及其子类)或错误(Error),也不反映方法内部实际可能抛出但未声明的异常。
返回值说明
该方法返回 Class>[],每个元素对应 throws 中的一个异常类型。若方法没有声明任何受检异常,则返回空数组(不是 null)。
基本用法示例
假设有一个类:
public class Service {
public void doWork() throws IOException, SQLException {
// ...
}
public void safeMethod() {
// 无 throws 声明
}
public void riskyMethod() throws RuntimeException { // RuntimeException 不计入
throw new IllegalArgumentException();
}
}
反射获取异常类型:
Method m1 = Service.class.getMethod("doWork");
Class>[] exTypes = m1.getExceptionTypes(); // 长度为 2:IOException、SQLException
Method m2 = Service.class.getMethod("safeMethod");
Class>[] exTypes2 = m2.getExceptionTypes(); // 长度为 0
Method m3 = Service.class.getMethod("riskyMethod");
Class>[] exTypes3 = m3.getExceptionTypes(); // 长度为 0(RuntimeException 不被返回)
常见注意事项
- 只返回 受检异常(即继承自
Exception但非RuntimeException子类的类) - 返回顺序与源码中
throws列表顺序一致 - 不会解析泛型异常(如
throws MyException<string></string>),只返回原始类型MyException.class - 无法得知异常是否被实际抛出,仅反映编译期声明
实用小技巧
- 配合
Class.isAssignableFrom()判断是否属于某类异常体系,例如:exType.isAssignableFrom(SQLException.class) - 遍历时可用
exType.getSimpleName()获取简单类名,便于日志或提示 - 若需区分受检/非受检,可手动过滤:
!RuntimeException.class.isAssignableFrom(exType) && !Error.class.isAssignableFrom(exType)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











