throws用于声明方法可能抛出的受检异常,必须在调用可能抛出受检异常(如IOException、SQLException)且不捕获时使用,否则编译失败;它位于方法签名后,可声明多个异常,与throw语句(方法内抛异常实例)严格区分。

在Java中,throws关键字用于方法签名中声明该方法**可能抛出但不处理的受检异常(checked exception)**,把异常责任交给调用者处理。它不用于运行时异常(RuntimeException及其子类),因为编译器不要求声明它们。
什么时候必须用 throws
当方法体内调用了可能抛出受检异常的代码(比如文件读写、网络连接、反射操作等),而你选择不使用 try-catch 捕获,就必须在方法签名后加上 throws 异常类名,否则编译失败。
- 常见受检异常:IOException、SQLException、ClassNotFoundException、InterruptedException 等
- 错误示例:
FileReader fr = new FileReader("a.txt");编译报错,提示“Unhandled exception type FileNotFoundException” - 正确做法:在方法声明后加
throws FileNotFoundException
throws 的基本写法
语法格式为:修饰符 返回类型 方法名(参数列表) throws 异常类1, 异常类2, ...
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 可以声明多个异常,用英文逗号分隔
- 子类异常写在前面,父类写在后面(非强制,但符合逻辑习惯)
- 例如:
public void readFile() throws FileNotFoundException, IOException - 如果调用的方法本身已 throws 异常,当前方法也可继续 throws(传递),或改为 try-catch 处理
和 throw 的区别别搞混
throw 是语句,用于方法内部主动抛出一个异常对象(如 throw new IllegalArgumentException("name cannot be null"););throws 是声明,出现在方法签名上,表示“我可能会扔出这些异常,请调用者兜底”。
立即学习“Java免费学习笔记(深入)”;
- throw 后跟异常实例(new 出来的对象)
- throws 后跟异常类名(可多个,逗号分隔)
- 一个方法可以有多个 throw 语句,但只能有一个 throws 声明(写在方法头)
不处理受检异常会怎样
如果不捕获也不声明 throws,编译器直接拒绝编译。这是Java强制的异常检查机制,目的是让开发者明确考虑错误场景。
- 例如:直接写
Thread.sleep(100);会报错,因 sleep 声明了throws InterruptedException - 解决方式二选一:用 try-catch 包裹,或在当前方法签名加
throws InterruptedException - 若选择 throws,调用这个方法的上层代码同样面临相同选择——异常会逐层向上传递,直到被 catch 或到达 main 方法

















