throws用于声明方法可能抛出但不处理的受检异常,调用者必须用try-catch处理或继续throws向上抛出;运行时异常无需声明。

在 Java 中,throws 关键字用于方法签名后,声明该方法**可能抛出但不处理的受检异常(checked exception)**。它不是用来抛出异常,而是告诉调用者:“我这个方法可能会出这类错,你得负责处理”。
基本语法格式
方法声明末尾加上 throws,后面跟一个或多个异常类名,用逗号分隔:
修饰符 返回类型 方法名(参数列表) throws 异常类1, 异常类2 {
// 方法体
}
只能声明受检异常
只有 Exception 及其子类(但不包括 RuntimeException 及其子类) 需要用 throws 声明。运行时异常(如 NullPointerException、ArrayIndexOutOfBoundsException)可以不声明,编译器不强制。
- ✅ 必须声明:
IOException、SQLException、ClassNotFoundException - ❌ 不必声明:
NullPointerException、IllegalArgumentException、ArrayIndexOutOfBoundsException
调用者必须处理声明的异常
如果一个方法 A 使用 throws 声明了异常,那么调用 A 的方法 B 就必须:
- 用 try-catch 捕获并处理该异常;
- 或者继续用 throws 向上抛出(把责任交给更上层);
- 不能既不捕获也不声明——否则编译失败。
示例:文件读取声明 IOException
import java.io.*;
public class FileReaderExample {
// 声明可能抛出 IOException
public static String readFile(String path) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(path));
return reader.readLine();
}
public static void main(String[] args) {
// 调用方必须处理 IOException
try {
String line = readFile("data.txt");
System.out.println(line);
} catch (IOException e) {
System.err.println("读取文件失败:" + e.getMessage());
}
}
}
可以声明多个异常,也可与重写规则配合
- 多个异常用逗号分隔:
throws IOException, SQLException - 子类重写父类方法时,throws 的异常类型不能比父类更宽泛(只能相同、更具体,或不声明);
- 例如父类声明
throws Exception,子类可声明throws IOException或throws(即不抛),但不能声明throws Throwable。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











