一、简介
IllegalArgumentException
是 Java 中的一个运行时异常,继承自 RuntimeException
。这个异常通常用于指示传递给方法的参数不符合预期或违反了方法的约定。 使用 IllegalArgumentException
可以帮助开发者明确地指出错误发生的原因,并且在代码中提供更清晰的错误处理逻辑。
二、主要特点
- 继承关系:
IllegalArgumentException
继承自RuntimeException
,这意味着它是一个非检查型异常(unchecked exception),编译器不会强制要求你捕获或声明抛出该异常。 - 用途: 当方法接收到一个非法或不合理的参数时,可以抛出
IllegalArgumentException
。这有助于确保方法的正确性和数据的一致性。 - 构造函数:
IllegalArgumentException()
: 创建一个没有详细消息的IllegalArgumentException
。IllegalArgumentException(String s)
: 创建一个带有详细消息的IllegalArgumentException
,其中 s 是描述异常原因的字符串。
三、使用场景
- 输入验证: 在方法开始执行之前,对传入的参数进行验证,如果参数不符合预期,则抛出
IllegalArgumentException
。 - 边界条件: 当参数超出合法范围时,例如数组索引越界、负数作为长度等。
- 无效值: 当参数值无效或不合理时,例如空引用、空字符串等。
四、示例
- 示例 1: 参数为空
public void processString(String str) {
if (str == null) {
throw new IllegalArgumentException("字符串不能为空");
}
// 处理字符串
}
- 示例 2: 参数不在合法范围内
public void setAge(int age) {
if (age < 0 || age > 150) {
throw new IllegalArgumentException("年龄必须在0到150之间");
}
this.age = age;
}
- 示例 3: 参数类型不匹配
public void addElement(List<String> list, String element) {
if (list == null) {
throw new IllegalArgumentException("列表不能为空");
}
if (element == null) {
throw new IllegalArgumentException("元素不能为空");
}
list.add(element);
}
五、优点
- 清晰性:通过抛出
IllegalArgumentException
,可以明确地告诉调用者哪个参数是非法的,以及为什么非法。 - 维护性:在代码中使用
IllegalArgumentException
可以提高代码的可读性和可维护性,因为错误处理逻辑更加明确。 - 一致性:在整个项目中一致地使用
IllegalArgumentException
可以使代码风格更加统一,便于团队协作。
六、注意事项
- 避免滥用:虽然
IllegalArgumentException
很有用,但不要过度使用。只在确实需要时才抛出异常,避免不必要的性能开销。 - 日志记录:在抛出
IllegalArgumentException
时,建议记录日志以便于调试和追踪问题。 - 文档说明:在方法的文档注释中明确指出哪些参数是必需的,以及它们的合法范围,这样可以帮助调用者避免传递非法参数。