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
相关产品推荐
相关产品推荐

