You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java年龄校验抛ArithmeticException导致程序终止该如何避免?

解决方案

要避免程序因抛出的ArithmeticException终止,核心思路是主动处理抛出的异常,有两种常用实现方式:


方式1:在调用checkAge()的位置捕获异常

这是最常用的处理方式,不对原有方法逻辑做修改,只在调用侧添加异常捕获逻辑即可:

public class AgeTest {
    // 原有checkAge方法保持不变,补充age参数
    void checkAge(int age) {
        if (age < 18) {
            throw new ArithmeticException("Access denied - You must be at least 18 years old.");
        }
        else {
            System.out.println("Access granted - You are old enough!");
        }
    }

    public static void main(String[] args) {
        AgeTest test = new AgeTest();
        int inputAge = 16;
        // 用try-catch块包裹方法调用,捕获抛出的异常
        try {
            test.checkAge(inputAge);
        } catch (ArithmeticException e) {
            // 捕获到异常后自定义处理逻辑,不会触发程序终止
            System.out.println("校验失败:" + e.getMessage());
            // 可在此处添加后续业务逻辑,比如提示用户重新输入年龄
        }
        // try-catch块外的代码会正常执行
        System.out.println("程序继续运行...");
    }
}

注意:捕获的异常类型要和抛出的类型匹配,这里抛出的是ArithmeticException,所以catch块优先写该类型即可。不推荐直接捕获Exception等大类型,容易掩盖其他未知异常。


方式2:修改checkAge()方法本身,不抛出异常,直接返回校验结果

如果不想用异常处理业务判断逻辑,也可以调整方法逻辑,用返回值标识校验结果:

// 修改方法返回布尔值表示是否校验通过
boolean checkAge(int age) {
    if (age < 18) {
        System.out.println("Access denied - You must be at least 18 years old.");
        return false;
    }
    System.out.println("Access granted - You are old enough!");
    return true;
}

// 调用时直接判断返回值即可
public static void main(String[] args) {
    AgeTest test = new AgeTest();
    boolean checkPass = test.checkAge(16);
    if (!checkPass) {
        // 自定义校验不通过的处理逻辑
        System.out.println("请更换符合年龄要求的账号后重试");
    }
    System.out.println("程序继续运行...");
}

额外说明:从Java开发规范角度,ArithmeticException原本是用来标识算术运算错误(比如除以零)的异常,用它处理年龄校验这类业务逻辑其实并不合适,实际开发中更推荐自定义业务异常,或者直接用返回值处理这类业务校验场景。

内容的提问来源于stack exchange,提问作者poiqwlf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:36:06