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

在Java开发中,IllegalArgumentException 是一个常用的运行时异常,通常用于表示传入方法的参数不合法或不符合预期。合理地捕获和处理这个异常,能有效提升代码的健壮性和可维护性。虽然它属于非受检异常(unchecked exception),不需要强制捕获,但在某些场景下进行捕获并统一处理,是参数校验与异常管理的重要技巧。
何时抛出 IllegalArgumentException
当方法接收到非法、无效或不合理的参数值时,应主动抛出 IllegalArgumentException。常见情况包括:
示例:
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<String> handleIllegalArgument(IllegalArgumentException e) { return ResponseEntity.badRequest().body("参数不合法:" + e.getMessage()); } }
结合断言与工具类简化校验
手动编写 if 判断容易冗余,可借助 JDK 自带方法或第三方工具提升效率。
示例:
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 的技巧,能让参数校验更有条理,异常处理更优雅。关键是早发现、早反馈,把问题控制在源头。


