在Java中如何捕获IllegalArgumentException

使用try-catch捕获IllegalArgumentException可提升程序健壮性,如Integer.parseInt("abc")抛出NumberFormatException(其子类)时能被catch块处理;业务中可主动抛出该异常并捕获,如setAge(-5)时提示“年龄必须在0到150之间”;也可合并捕获多个异常,用|分隔类型,统一处理参数校验问题。

在Java中捕获 IllegalArgumentException 的方法与其他异常一样,使用 try-catch 语句块即可。这个异常通常表示传入方法的参数不合法或不符合要求,属于运行时异常(RuntimeException),虽然不是强制捕获的,但在某些场景下提前处理能提升程序健壮性。

使用 try-catch 捕获 IllegalArgumentException

将可能抛出该异常的代码放在 try 块中,并用 catch 捕获 IllegalArgumentException:

try {
    Integer.parseInt("abc");
} catch (IllegalArgumentException e) {
    System.out.println("参数非法:" + e.getMessage());
}

上面的例子中,Integer.parseInt() 实际上抛出的是 NumberFormatException,它是 IllegalArgumentException 的子类,因此也能被成功捕获。

主动抛出并捕获自定义的 IllegalArgumentException

在业务逻辑中,可以手动检查参数并抛出异常,再进行捕获处理:

public void setAge(int age) {
    if (age < 0 || age > 150) {
        throw new IllegalArgumentException("年龄必须在 0 到 150 之间");
    }
    // 正常处理
}

// 调用时捕获
try {
    setAge(-5);
} catch (IllegalArgumentException e) {
    System.out.println("错误:" + e.getMessage());
}

捕获多个异常的情况

如果一段代码可能抛出多种异常,可以分别处理,也可以合并处理:

try {
    someMethod(null)

; } catch (IllegalArgumentException | NullPointerException e) { System.err.println("参数相关异常:" + e.getMessage()); }

这样可以统一处理与参数校验相关的异常类型。

基本上就这些。只要把可能出问题的代码放进 try 块,明确 catch IllegalArgumentException,就能有效应对参数不合法的情况。