java中整数除零立即抛出arithmeticexception,必须预防而非捕获;浮点数除零按ieee 754返回infinity或nan;应校验除数非零,避免空catch或类型替换。

Java 中整数除零会直接抛出 ArithmeticException,无法通过常规运算符“处理”——它不是可忽略的警告,而是必须显式捕获或避免的运行时异常。
整数除零:立即抛出 ArithmeticException
Java 规定,当使用 / 或 % 对整数(int、long、short、byte)进行除零操作时,JVM 会在运行时立即抛出 java.lang.ArithmeticException: / by zero。这不是编译错误,但一旦执行就崩溃。
-
int a = 5 / 0;→ 编译通过,运行时报错 -
int b = 10 % 0;→ 同样抛出ArithmeticException - 该异常继承自
RuntimeException,无需强制 try-catch,但不捕获就会终止当前线程
浮点数除零:返回 Infinity 或 NaN,不抛异常
与整数不同,float 和 double 的除零是 IEEE 754 标准定义的行为,属于合法运算:
-
5.0 / 0.0→ 结果为Infinity(正无穷) -
-3.0 / 0.0→ 结果为-Infinity -
0.0 / 0.0→ 结果为NaN(Not-a-Number) - 可用
Double.isInfinite()或Double.isNaN()检查结果
如何安全地避免整数除零
关键不是“处理异常”,而是“预防发生”。推荐在除法前主动校验除数:
- 用
if (divisor != 0)判断,再执行除法 - 对用户输入、配置值、数据库字段等外部数据,必须做空值和零值校验
- 封装工具方法,例如:
public static int safeDivide(int dividend, int divisor) {<br> return divisor == 0 ? 0 : dividend / divisor;<br>}
(返回默认值需结合业务逻辑确定) - 若需统一拦截,可在关键服务层用 try-catch 包裹并记录日志,但不应依赖它作为主控逻辑
不建议的做法
以下方式看似“处理”,实则掩盖问题或引入隐患:
- 空 catch 块:
try { ... } catch (ArithmeticException e) {}→ 异常被吞,结果不可知 - 用浮点数替代整数运算来绕过异常 → 精度丢失、语义混淆,违背类型设计初衷
- 依赖 IDE 或静态分析提示代替运行时校验 → 编译期无法覆盖所有动态路径
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











