java中应于方法入口处用illegalargumentexception快速拦截非法参数,校验须前置、聚焦基础约束,抛出时需带具体错误消息,并善用工具简化重复校验。

Java 中方法通过抛出 IllegalArgumentException 来处理非法参数,核心是“在入口处快速拦截明显错误”,而不是等后续逻辑出问题才暴露。它不是兜底手段,而是契约声明——告诉调用方:“你传的值根本不符合这个方法的基本要求”。
校验必须放在方法最开头
参数校验逻辑要写在业务代码执行前,确保非法输入不会触发任何副作用(比如数据库写入、状态变更、远程调用)。一旦发现不合法,立刻中断流程。
- ✅ 正确:先检查,再处理
- ❌ 错误:先查数据库、更新缓存,最后才校验 age 是否为负数
只校验 API 契约明确禁止的值
不是所有“看起来不对”的值都要拦。重点判断:这个参数值在当前方法语义下是否根本不可能合法。
- 允许为 null 的字段(如可选 email)不校验 null
- 余额不足、库存不够属于业务规则,应抛
IllegalStateException或自定义异常 - 但
userId = null、age = -5、status = "unknown"这类违反基础约束的,就该用IllegalArgumentException
抛出时带具体、可读的错误消息
消息要说明哪个参数、为什么错、期望是什么。避免模糊表述如“参数错误”。
- ✅
throw new IllegalArgumentException("email must not be null or empty") - ✅
throw new IllegalArgumentException("timeoutMs must be positive, got: " + timeoutMs) - ❌
throw new IllegalArgumentException("invalid input")
善用工具简化常见校验
重复代码容易漏检或消息不一致。JDK 提供了基础支持,也可封装轻量工具。
-
Objects.requireNonNull(obj, "name must not be null")替代手写 null 判断 - 对字符串非空:可用
StringUtils.isNotBlank(str)(Apache Commons)或自定义checkNotBlank(str, "username") - 数值范围校验可封装为
checkInRange(age, 0, 150, "age"),统一格式和提示
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











