悠悠楠杉
网站页面
正文:
在Java开发中,IllegalArgumentException是常见的运行时异常,通常表示方法接收到不合法或不适用的参数。正确处理这类异常不仅能提升代码的健壮性,还能为开发者提供清晰的调试线索。本文将系统讲解其使用场景、捕获方法及最佳实践。
该异常通常在以下场景触发:
1. 参数值超出有效范围:例如要求正数却传入负数。
2. 参数格式不符:如日期字符串解析失败。
3. 业务规则冲突:比如用户年龄小于18岁时禁止注册。
示例:
public void setAge(int age) {
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数: " + age);
}
this.age = age;
}直接捕获IllegalArgumentException并非最佳实践,更推荐以下两种方式:
在方法入口处显式检查参数,避免异常发生:
public void processOrder(Order order) {
Objects.requireNonNull(order, "订单对象不能为null");
if (order.getItems().isEmpty()) {
throw new IllegalArgumentException("订单商品列表不能为空");
}
// 正常处理逻辑
}结合@ControllerAdvice实现全局异常拦截:
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity handleIllegalArgument(IllegalArgumentException ex) {
return ResponseEntity.badRequest().body(ex.getMessage());
}
} 对于复杂业务,可扩展自定义异常增强可读性:
public class InvalidUserInputException extends IllegalArgumentException {
public InvalidUserInputException(String field, String reason) {
super(String.format("字段[%s]非法: %s", field, reason));
}
}
// 使用示例
validateEmail("user@.com");
void validateEmail(String email) {
if (!email.matches(".+@.+\\..+")) {
throw new InvalidUserInputException("email", "格式不符合RFC标准");
}
}通过合理运用IllegalArgumentException,开发者能构建更安全、易维护的代码。记住:好的异常处理不是事后补救,而是事先设计。