throw用于主动抛出异常对象,必须是throwable子类实例,每次仅抛一个,抛出后方法立即终止;需调用方处理或声明,分运行时异常(无需throws)和检查型异常(必须throws)。

Java 中 throw 关键字用于在代码中主动抛出一个异常对象,常用于检测到非法参数、业务规则不满足或需要提前中断执行流程的场景。
throw 的基本用法
语法很简单:throw 异常对象;。注意:必须是 Throwable 或其子类(如 Exception、RuntimeException)的实例,不能是字符串或普通类。
- 每次只能抛出一个异常对象
- 抛出后当前方法立即终止,后续代码不再执行
- 必须由调用方处理(try-catch)或声明(throws),否则编译报错(检查型异常)
抛出运行时异常(无需声明)
适合程序逻辑错误或不可恢复的条件,比如空指针、数组越界、参数非法等:
public void setAge(int age) {
if (age 150) {
throw new IllegalArgumentException("年龄必须在 0~150 之间");
}
this.age = age;
}
这类异常继承自 RuntimeException,调用方不用强制 try-catch 或 throws,但建议在文档或注释中说明。
抛出检查型异常(需显式处理)
适用于可预期且应被上层处理的问题,例如文件不存在、网络超时等:
public void readFile(String path) throws IOException {
if (path == null) {
throw new IOException("文件路径不能为空");
}
// 实际读取逻辑...
}
这里 IOException 是检查型异常,方法签名必须加 throws IOException,否则编译失败;调用方也必须捕获或继续上抛。
自定义异常配合 throw 使用
更清晰地表达业务语义:
public class InsufficientBalanceException extends Exception {
public InsufficientBalanceException(String msg) {
super(msg);
}
}
// 使用
public void withdraw(double amount) throws InsufficientBalanceException {
if (amount > balance) {
throw new InsufficientBalanceException("余额不足,无法提现:" + amount);
}
balance -= amount;
}
自定义异常让错误含义更明确,便于统一日志记录和前端提示。
注意 throw 和 throws 的区别:throw 是“抛出一个异常实例”,throws 是“声明本方法可能抛出哪些异常类型”。两者常配合使用,但作用完全不同。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











