Java 中的 IllegalArgumentException 示例

2024 年 9 月 10 日 | 阅读 3 分钟

Java 是一种广泛使用的编程语言,以其健壮性和保护能力而闻名。然而,即使在最谨慎编写的程序中,也可能出现错误。一种常见的错误类型是“非法参数异常”。在本节中,我们将探讨此异常是什么、为什么会发生,并提供完整的程序示例来说明其行为。

什么是非法参数异常?

在 Java 中,IllegalArgumentException 是一种运行时异常,当调用一个带有非法或不适当参数的方法时发生。这意味着参数不符合方法的预期或违反了其先决条件。

InvalidArgumentExceptionExample.java

输出

Exception in thread "main" java.lang.IllegalArgumentException: Name cannot be null
	at InvalidArgumentExceptionExample.addName(InvalidArgumentExceptionExample.java:12)
	at InvalidArgumentExceptionExample.main(InvalidArgumentExceptionExample.java:8)

我们创建一个简单的程序来存储一个姓名列表。addName() 方法旨在将姓名添加到列表中,但它会检查提供的姓名是否为 null。如果姓名为 null,则会抛出带有描述性错误消息的 IllegalArgumentException。

在这种情况下,程序尝试将一个 null 姓名添加到列表中,由于该方法明确禁止 null 姓名,因此会触发 IllegalArgumentException。

让我们探讨 IllegalArgumentException 可能发生的常见情况:

1. Null 参数

NullArgumentExceptionExample.java

输出

Exception in thread "main" java.lang.IllegalArgumentException: Text cannot be null
	at NullArgumentExceptionExample.printLength(NullArgumentExceptionExample.java:10)
	at NullArgumentExceptionExample.main(NullArgumentExceptionExample.java:6)

printLength() 方法需要一个非 null 字符串,如果提供 null,则会抛出 IllegalArgumentException。

无效的数值

InvalidNumberArgumentExceptionExample.java

输出

Exception in thread "main" java.lang.IllegalArgumentException: Number must be non-negative
	at InvalidNumberArgumentExceptionExample.calculateSquareRoot(InvalidNumberArgumentExceptionExample.java:10)
	at InvalidNumberArgumentExceptionExample.main(InvalidNumberArgumentExceptionExample.java:6)

calculateSquareRoot 方法计算一个数字的平方根,但只接受非负值。如果提供了负数,则会抛出 IllegalArgumentException。

2. 空集合或无效集合

InvalidCollectionArgumentExceptionExample.java

输出

Exception in thread "main" java.lang.IllegalArgumentException: List must be non-null and non-empty
	at InvalidCollectionArgumentExceptionExample.processList(InvalidCollectionArgumentExceptionExample.java:11)
	at InvalidCollectionArgumentExceptionExample.main(InvalidCollectionArgumentExceptionExample.java:6)

processList() 方法需要一个非 null 且非空的列表。如果提供 null 或空列表,则会抛出 IllegalArgumentException。

处理 IllegalArgumentException 的最佳实践

为了优雅地处理 IllegalArgumentException,请考虑以下最佳实践:

  1. 尽早验证输入:确保在方法开始时执行输入验证,以便尽早捕获无效参数。
  2. 使用描述性的错误消息:提供清晰有意义的错误消息,以帮助开发人员识别异常的原因。
  3. 记录先决条件:清楚地记录每个方法的先决条件,指定预期的参数范围和类型。
  4. 抛出特定的异常:如果可能,使用更具体的异常。如果方法需要特定类型,请考虑为 null 参数抛出 NullPointerException,并为其他特定的无效状态抛出适当的异常。
  5. 自定义异常处理:实现自定义异常处理来封装异常的信息,并以适合您应用程序的方式处理它。

总之,理解和处理 IllegalArgumentException 对于编写健壮可靠的 Java 程序至关重要。通过验证输入、提供描述性的错误消息并遵循最佳实践,开发人员可以创建不仅功能齐全而且能够抵御意外输入的代码。如示例所示,在开发过程的早期捕获和解决非法参数有助于提高 Java 应用程序的整体稳定性和可维护性。