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

如何捕获除数为0时的ArithmeticException?我的代码无法捕获该异常

问题原因

在Java中,浮点数(double/float类型)的除法运算不会因为除数为0抛出ArithmeticException。当你用double类型的0作为除数时,运算结果会是特殊的浮点值:

  • 如果被除数是非0数,结果是Infinity或-Infinity
  • 如果被除数也是0,结果是NaN(非数字)

而ArithmeticException仅在整数类型除以0时才会抛出,所以你的catch块永远不会被触发。

解决方案

你可以通过两种方式处理除数为0的情况:

方法1:提前检查除数是否为0

在执行除法前,判断除数是否等于0,手动处理异常场景:

static double Division(double num1, double num2) {
    if (num2 == 0) {
        System.out.println("除数不能为0");
        return 0; // 或者抛出自定义异常
    }
    return num1 / num2;
}

方法2:检查运算结果是否为无穷大/NaN

利用Double类的工具方法判断运算结果是否合法:

static double Division(double num1, double num2) {
    double num3 = num1 / num2;
    if (Double.isInfinite(num3) || Double.isNaN(num3)) {
        System.out.println("出现非法除法运算(除数为0)");
        return 0;
    }
    return num3;
}

另外,如果你希望严格触发ArithmeticException,可以将变量改为整数类型(比如int),此时除以0就会抛出该异常,你的catch块就能正常捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:37:23