IllegalArgumentException用于表示方法接收到不合法参数,如年龄为负或分页大小小于1时抛出,示例中setAge方法对age

IllegalArgumentException 是 Java 中一个常见的运行时异常,用于表明向方法传递了一个不合法或不正确的参数。它继承自 RuntimeException,因此属于非检查异常,不需要强制捕获或声明抛出。
参数值不符合业务逻辑
当方法接收到语义上不合理或超出允许范围的参数时,应抛出 IllegalArgumentException。
- 例如,一个计算年龄的方法接收负数作为出生年份,显然不合理。
- 又如,分页查询中 pageSize 小于 1,这种情况下无法执行有效查询。
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
this.age = age;
}
参数为空但不允许 null
虽然 NullPointerException 更常用于空指针场景,但在方法设计中,若明确要求参数不能为 null,使用 IllegalArgumentException 也是合理选择,尤其在参数校验集中处理时。
- 比如字符串处理方法要求输入非 null 且非空。
- 集合操作中传入 null 集合导致无法继续。
public void processName(String name) {
if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("姓名不能为空");
}
// 处理逻辑
}
枚举或状态值不在预期范围内
当方法接收一个表示状态、类型或类别的参数,而该参数的值不在预定义集合中时,可抛出此异常。
立即学习“Java免费学习笔记(深入)”;
- 例如订单状态只能是 "PENDING", "SHIPPED", "DELIVERED",传入 "UNKNOWN" 应被拒绝。
- 方法根据字符串决定行为分支,但传入了无效指令。
public void setStatus(String status) {
if (!Arrays.asList("PENDING", "SHIPPED", "DELIVERED").contains(status)) {
throw new IllegalArgumentException("非法的状态值: " + status);
}
this.status = status;
}
字符串格式不符合要求
当期望参数满足特定格式(如邮箱、电话、日期)但实际不符合时,提前校验并抛出异常有助于快速失败。
- 注册用户时邮箱格式错误。
- 传入的日期字符串无法解析。
public void setEmail(String email) {
if (email == null || !email.matches("^[\\w.-]+@[^@]+$")) {
throw new IllegalArgumentException("邮箱格式不正确");
}
this.email = email;
}
基本上就这些。合理使用 IllegalArgumentException 能让 API 更健壮,提示更清晰,帮助调用者快速发现和修复问题。关键是在入口处做好参数校验,及时反馈错误信息。不复杂但容易忽略。










