throw用于主动抛出已创建的Throwable对象以中断流程并交由catch处理,后接异常实例而非类名或字符串,受检异常需声明throws或捕获,非受检异常可不声明但建议文档说明,其后语句不可达。

使用 throw 关键字可以在代码中主动抛出一个已创建的异常对象,从而中断当前执行流程,并将控制权交给最近的匹配 catch 块。它不负责创建异常,只负责“扔出”一个已存在的异常实例。
throw 后必须跟一个 Throwable 类型的对象
throw 后面不能是类名、字符串或任意值,只能是一个继承自 Throwable 的对象(如 Exception、RuntimeException 及其子类)。常见写法包括:
throw new IllegalArgumentException("参数不能为负数");throw new NullPointerException();-
throw someSavedException;(前提是someSavedException是有效的异常引用)
throw 通常用在逻辑校验或错误场景中
当检测到非法状态、无效输入或业务规则被违反时,适合用 throw 主动上报问题。例如:
// 检查用户年龄是否合法
if (age < 0 || age > 150) {<br>
throw new IllegalArgumentException("年龄必须在 0 到 150 之间");<br>
}
这样能让调用方明确知道错在哪,而不是静默失败或返回错误码。
throw 不会自动处理异常,需配合 try-catch 或 throws 声明
单独写 throw 会让编译器检查异常类型:
- 若抛出的是 受检异常(如
IOException),所在方法必须用throws声明,或用try-catch包裹; - 若抛出的是 非受检异常(如
IllegalArgumentException),则无需强制声明,但建议在文档中说明。
不要在 throw 后写普通语句
throw 是终结性操作,执行后后续代码不会运行(即“不可达语句”)。编译器会报错:
throw new RuntimeException();<br>
System.out.println("这行永远不会执行"); // 编译错误
如果需要清理资源,应放在 finally 块或使用 try-with-resources。

















