throw用于主动抛出已实例化的throwable异常对象,语法要求后跟异常实例而非类名,执行后方法立即终止,不可达代码将导致编译错误,且需区分throws声明。

在 Java 中,throw 关键字用于在代码执行过程中**主动抛出一个异常对象**,它必须后跟一个**已实例化的 Throwable 或其子类(如 Exception、RuntimeException)的对象**,不能直接跟异常类名。
基本语法格式
throw 后面必须是一个异常对象,不是类名。常见写法有三种:
- 抛出新创建的异常对象:
throw new IllegalArgumentException("参数不合法"); - 抛出已声明并初始化的异常变量:
IllegalArgumentException e = new IllegalArgumentException("值为空"); throw e; - 在 catch 块中重新抛出(或包装后抛出):
throw new RuntimeException("包装原始异常", originalException);
throw 必须在可执行语句中,且后续代码不可达
throw 是一条终止性语句,执行后方法立即退出(除非被外层捕获)。因此 throw 后面不能跟普通语句,否则编译报错:
throw new RuntimeException("出错了");
System.out.println("这行永远执行不到"); // 编译错误:Unreachable statement
throw 和 throws 的区别要分清
throw 是语句,用在方法体内部,表示“这里抛一个异常”;throws 是方法声明的一部分,表示“这个方法可能把异常交给调用者处理”。
例如:
public void divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("除数不能为零"); // 主动抛出
}
return a / b;
}
注意:如果 throw 的是 检查型异常(checked exception)(如 IOException),那么方法签名必须用 throws 声明,否则编译不通过;而运行时异常(unchecked,如 RuntimeException 及其子类)则无需声明。
常用场景与建议
- 参数校验失败时提前抛出异常,避免后续逻辑出错,例如:
if (str == null) throw new NullPointerException("字符串不能为空"); - 业务规则不满足时抛出自定义异常,增强可读性和可维护性
- 捕获异常后不打算处理,而是转换为更合适的异常类型再抛出(异常链)
- 避免空 throw(如
throw null;),会触发 NullPointerException
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











