IllegalArgumentException用于参数校验,当传入非法参数时抛出,如null值、越界数值等;可通过try-catch局部捕获或@ControllerAdvice全局处理;结合Objects.requireNonNull等工具简化校验,提升代码健壮性与可维护性。

在Java开发中,IllegalArgumentException 是一个常用的运行时异常,通常用于表示传入方法的参数不合法或不符合预期。合理地捕获和处理这个异常,能有效提升代码的健壮性和可维护性。虽然它属于非受检异常(unchecked exception),不需要强制捕获,但在某些场景下进行捕获并统一处理,是参数校验与异常管理的重要技巧。
何时抛出 IllegalArgumentException
当方法接收到非法、无效或不合理的参数值时,应主动抛出 IllegalArgumentException。常见情况包括:
- 参数为 null,但不允许为空
- 数值超出合理范围(如年龄为负数)
- 字符串格式不符合要求(如邮箱格式错误)
- 枚举值不在允许范围内
示例:
public void setAge(int age) {
if (age < 0 || age > 150) {
throw new IllegalArgumentException("年龄必须在0到150之间");
}
this.age = age;
}
如何捕获 IllegalArgumentException
尽管可以在方法内部直接抛出该异常,但在调用层或统一异常处理机制中进行捕获,有助于集中处理错误信息,避免程序崩溃。
立即学习“Java免费学习笔记(深入)”;
使用 try-catch 捕获示例:
try {
userService.setAge(-5);
} catch (IllegalArgumentException e) {
System.err.println("参数错误:" + e.getMessage());
// 可记录日志、返回友好提示等
}
在 Web 应用中(如 Spring Boot),更推荐使用全局异常处理器:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity handleIllegalArgument(IllegalArgumentException e) {
return ResponseEntity.badRequest().body("参数不合法:" + e.getMessage());
}
}
结合断言与工具类简化校验
手动编写 if 判断容易冗余,可借助 JDK 自带方法或第三方工具提升效率。
- Objects.requireNonNull():检查是否为 null
- StringUtils(Apache Commons Lang):判断字符串是否为空
- 自定义校验工具类封装常用逻辑
示例:
public void setName(String name) {
Objects.requireNonNull(name, "姓名不能为空");
if (name.trim().isEmpty()) {
throw new IllegalArgumentException("姓名不能全为空格");
}
this.name = name.trim();
}
最佳实践建议
合理使用 IllegalArgumentException 能让代码更清晰,但需注意以下几点:
- 异常信息应具体明确,便于排查问题
- 优先在入口方法(如控制器、公共API)做参数校验
- 避免在私有方法中过度校验,根据上下文决定是否需要
- 结合注解校验(如 Jakarta Bean Validation)实现声明式校验
基本上就这些。掌握抛出与捕获 IllegalArgumentException 的技巧,能让参数校验更有条理,异常处理更优雅。关键是早发现、早反馈,把问题控制在源头。










