Java方法签名中声明多个受检异常需在throws后用英文逗号分隔,仅限继承自Exception但非RuntimeException子类的异常,如IOException、SQLException、ParseException;NullPointerException等运行时异常不可也不需声明。

Java 方法签名中声明多个受检异常,是在 throws 关键字后列出异常类名,用英文逗号(,)分隔。
语法格式
方法声明末尾使用 throws,后面跟一个或多个受检异常类型(即 Exception 及其子类,但不包括 RuntimeException 及其子类):
必须是受检异常
只有继承自 java.lang.Exception 且不是 RuntimeException 子类的异常,才属于“受检异常”,才需要在方法签名中显式声明。例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
IOException✅ 需要声明 -
SQLException✅ 需要声明 -
ParseException(来自java.text)✅ 需要声明 -
NullPointerException❌ 运行时异常,不能也不需声明 -
IllegalArgumentException❌ 同上
实际例子
下面是一个读取文件并解析 JSON 的方法,可能抛出两种受检异常:
立即学习“Java免费学习笔记(深入)”;
public String readFileAndParse(String path) throws IOException, ParseException {String content = Files.readString(Paths.get(path));
return new SimpleDateFormat("yyyy-MM-dd").parse(content).toString();
}
调用该方法时,调用方必须处理这两个异常——要么用 try-catch 捕获,要么继续向上 throws。
注意事项
- 异常顺序无关紧要,
throws IOException, SQLException和throws SQLException, IOException效果相同 - 可以同时声明受检异常和运行时异常,但后者声明无意义(编译器不强制处理),一般不写
- 如果方法内部抛出了未声明的受检异常,编译会报错:“unreported exception XXX; must be caught or declared to be thrown”
- 子类重写父类方法时,
throws列表只能缩小(减少异常类型、或改用更具体的子类),不能扩大

















