在java中,卫语句通过在方法入口处用if提前检查参数合法性并抛出illegalargumentexception,实现简洁、可读性强的防御式编程;常见校验包括null、空字符串、数值范围及集合状态,推荐使用objects.requirenonnull简化null检查,并注意异常信息具体、避免耗时操作。

在 Java 中,用卫语句(Guard Clause)提前检查参数合法性并抛出 IllegalArgumentException,是一种简洁、可读性强且符合防御式编程习惯的做法。核心思路是:在方法入口处快速拦截非法输入,避免后续逻辑被污染或进入不可预期状态。
卫语句的基本写法
卫语句通常出现在方法开头,用 if 判断条件,一旦不满足就立即抛异常,不嵌套、不延迟处理。
- 检查 null:适用于不允许为 null 的引用参数
- 检查空字符串或空白:适用于 String 类型的业务约束
- 检查数值范围:如负数、零值、超出阈值等
- 检查集合/数组状态:如 size == 0、null 等
常见场景与写法示例
字符串非空校验:
public void processName(String name) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("name must not be null or blank");
}
// 后续逻辑安全执行
}
数值范围校验:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
public void setAge(int age) {
if (age 150) {
throw new IllegalArgumentException("age must be between 0 and 150");
}
this.age = age;
}
集合非空校验:
public void batchUpdate(List<user> users) {
if (users == null || users.isEmpty()) {
throw new IllegalArgumentException("users list cannot be null or empty");
}
// 执行批量操作
}</user>
配合 Objects.requireNonNull 做更简洁的 null 检查
Java 7+ 提供了 Objects.requireNonNull,自带默认提示信息,适合纯 null 校验:
public void updateUser(User user) {
Objects.requireNonNull(user, "user must not be null");
// 继续处理
}
它内部就是卫语句逻辑,且支持自定义 message,语义清晰、代码更短。
注意事项和最佳实践
卫语句不是越多越好,要聚焦“真正影响方法正确执行”的前提条件。
- 异常消息尽量具体,说明哪个参数、为什么非法(比如 “timeoutMillis must be positive”)
- 避免在卫语句中做耗时操作(如远程调用、复杂计算)
- 多个参数校验建议按顺序独立判断,不要合并成一个长条件表达式
- 如果校验逻辑较重或复用频繁,可提取为私有工具方法,但保持卫语句结构不变
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










