throw用于主动抛出已创建的异常实例,必须是throwable或其子类对象,不能跟类名;抛出后终止当前方法并向上抛出,受检异常需配合throws声明或try-catch捕获。

throw 关键字用于在 Java 代码中主动抛出一个异常对象,它后面必须跟一个**已创建的异常实例**(即 Throwable 或其子类的对象),不能直接跟异常类名。
语法要求:throw 后必须是异常实例
常见错误写法:throw IllegalArgumentException; ❌(这是类名,不是实例)
正确写法:throw new IllegalArgumentException("参数不合法"); ✅
- 只能抛出 Throwable 类型或其子类(如 Exception、RuntimeException 及其派生类)的实例
- 抛出的异常会被当前方法终止执行,并沿调用栈向上传递,直到被 try-catch 捕获或由 JVM 处理
- 如果 throw 的是受检异常(checked exception),且当前方法没有声明 throws,编译会报错
在普通代码块中使用 throw 的典型场景
常用于参数校验、业务规则不满足、状态非法等情形:
- 校验方法入参是否为空:
if (str == null) throw new NullPointerException("字符串不能为 null"); - 校验数值范围:
if (age 150) throw new IllegalArgumentException("年龄必须在 0~150 之间"); - 模拟业务失败:
if (!user.isActive()) throw new IllegalStateException("用户已被禁用,无法执行操作");
配合 throws 声明受检异常
若 throw 的是 IOException、SQLException 等受检异常,方法签名需用 throws 声明,否则编译失败:
public void readFile(String path) throws IOException {if (path == null) throw new IOException("路径不能为空");// ... 实际读取逻辑}
throw 和 throws 的区别要分清
throw 是语句,出现在方法体内部,表示“抛出一个异常实例”;
throws 是修饰符,写在方法签名后,表示“本方法可能抛出哪些异常类型”,用于声明而非抛出。
- 一个方法可以有多个 throw 语句,但 throws 列表只写一次
- throw 抛出的是具体对象;throws 声明的是异常类型(类名)
- 运行时异常(如 NullPointerException)可 throw 不声明 throws;受检异常必须声明或捕获
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











