throw和throws有何区别
throw 和 throws 是 Java 中用于异常处理的两个关键字,它们的作用和使用场景不同。
一、throw(抛出异常对象)
作用:
用于在方法体内部手动抛出一个异常对象。
特点:
- 用在方法体内部
- 抛出的是一个具体的异常实例
- 执行到
throw时,程序会立即中断当前流程
示例:
public void checkAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
}
说明:
throw后面跟的是异常对象- 可以是运行时异常,也可以是受检异常
二、throws(声明抛出异常)
作用:
用于方法声明处,声明该方法可能抛出的异常类型,不负责处理。
特点:
- 用在方法声明上
- 表示“我不处理这个异常,交给调用者处理”
- 可以声明多个异常,用逗号分隔
示例:
public void readFile() throws IOException {
FileInputStream fis = new FileInputStream("test.txt");
}
说明:
throws后面跟的是异常类名- 调用该方法时,必须处理或继续声明抛出
三、核心区别对比
| 对比项 | throw | throws |
|---|---|---|
| 使用位置 | 方法体内部 | 方法声明处 |
| 作用 | 抛出一个异常对象 | 声明可能抛出的异常 |
| 后面跟的内容 | 异常对象 | 异常类名 |
| 是否中断程序 | 是 | 否 |
| 数量 | 一次只能抛一个 | 可声明多个异常 |
四、结合使用示例
public void test() throws Exception {
if (true) {
throw new Exception("发生错误");
}
}
五、一句话总结
throw 是“真的抛异常”,throws 是“告诉别人我可能抛异常”。
如果你愿意,我也可以帮你对比 运行时异常 vs 受检异常,或者结合面试常问点来讲。