throw用于主动抛出异常对象,必须是throwable或其子类的实例,如throw new illegalargumentexception("年龄不能为负数");常用于参数校验,后语句不执行;与throws配合使用,前者抛实例,后者声明类型。

在 Java 中,throw 关键字用于主动抛出一个异常对象,通常用在检测到非法状态、参数错误或业务规则不满足时,把控制权交还给调用方处理。
throw 的基本用法
语法很简单:throw 异常对象;。注意:这个异常对象必须是 Throwable 或其子类(如 Exception、RuntimeException)的实例。
- 不能直接 throw 类名,比如
throw IllegalArgumentException;是错的 - 必须 new 一个实例,例如
throw new IllegalArgumentException("年龄不能为负数"); - throw 后面的语句不会执行(类似 return),所以通常放在方法末尾前或条件分支中
配合 if 判断主动抛出异常
最常见的场景是校验参数。比如一个设置年龄的方法:
public void setAge(int age) {
if (age 150) {
throw new IllegalArgumentException("年龄必须在 0~150 之间");
}
this.age = age;
}
这样调用方一传错值,立刻得到明确提示,而不是等到后续逻辑出错才暴露问题。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
throw 和 throws 的区别
throw 是“抛出一个异常实例”,发生在方法内部;throws 是“声明可能抛出的异常类型”,写在方法签名上,告诉调用者“我可能会抛这个异常”。两者常一起用:
- 如果 throw 的是
RuntimeException及其子类(如NullPointerException),方法可以不写 throws - 如果 throw 的是
Exception及其子类(但不是 RuntimeException),方法必须在签名中用 throws 声明,否则编译不通过
例如:
public void readFile(String path) throws IOException {
if (path == null) {
throw new 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("余额不足:" + balance);
}
balance -= amount;
}
这样调用方能精准 catch 并做差异化处理,比泛泛地捕获 Exception 更可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










