throws用于声明方法可能抛出的受检异常,将处理责任移交调用者;必须用于ioexception等编译时异常,语法为“throws 异常类1, 异常类2”,不可用于运行时异常,且与throw(方法内抛出异常实例)有本质区别。

在 Java 中,throws 关键字用于声明一个方法可能抛出的受检异常(checked exception),把异常处理责任交给调用者。它不处理异常,只是“告知”上层:这里可能会出问题,你得负责兜底。
什么时候必须用 throws?
当方法体内出现了受检异常(比如 IOException、SQLException、ClassNotFoundException),而你又不想在当前方法里用 try-catch 处理它时,就必须在方法签名后加上 throws + 异常类名。
- 编译器会强制检查:不声明也不捕获 → 编译失败
- 运行时异常(如 NullPointerException、ArrayIndexOutOfBoundsException)属于非受检异常,不需要 throws 声明
throws 的基本写法
语法很简单:
修饰符 返回类型 方法名(参数) throws 异常类1, 异常类2 { ... }
可以声明多个异常,用逗号分隔:
public void readFile() throws IOException, SQLException- 如果调用的方法也 throws 异常,当前方法可以选择继续 throws(推给更上层),或自己 try-catch 消化掉
典型使用场景示例
比如读取文件内容,FileReader 构造或 read() 都可能抛出 IOException:
public String loadConfig(String path) throws IOException {
FileReader reader = new FileReader(path); // 可能抛出 IOException
BufferedReader br = new BufferedReader(reader);
return br.readLine();
}
调用方必须处理这个异常:
- 方式一:继续向上 throws:
public static void main(String[] args) throws IOException - 方式二:用 try-catch 包裹:
try { loadConfig("a.txt"); } catch (IOException e) { ... }
throws 和 throw 的区别
throws 是声明(在方法签名上),告诉别人“我可能扔出什么”;throw 是动作(在方法体内),真正“扔出一个异常对象”:
-
throw new IOException("文件不存在");—— 主动抛出异常实例 -
void f() throws IOException—— 声明可能由自己或调用的其他方法抛出该异常
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











