Java中整数除以零抛出ArithmeticException,因整数无法表示无穷大或未定义;应优先校验除数是否为0,而非依赖try-catch捕获。

Java 中整数除以零会抛出 ArithmeticException,这是运行时异常(RuntimeException),属于未检查异常,编译期不会强制要求处理,但一旦发生程序会中断执行。
为什么会报 ArithmeticException?
Java 规定:整数类型(int、long、short、byte、char)的除法运算中,若除数为 0,JVM 直接抛出 java.lang.ArithmeticException: / by zero。这是因为整数在计算机中无法表示“无穷大”或“未定义”,与浮点数(float/double)不同——后者除零会得到 Infinity 或 NaN,不抛异常。
如何避免或捕获这个错误?
关键在于**提前校验除数是否为零**,而不是依赖 try-catch 处理逻辑错误:
- 在执行除法前,显式判断除数是否为 0,是更安全、更高效的写法
- 如果除数来自用户输入、配置或外部数据,必须做校验
- 仅在极少数难以预判除数来源的场景下,才用 try-catch 包裹并给出友好提示或默认值
正确示例:预防优于捕获
✅ 推荐方式(主动防御):
立即学习“Java免费学习笔记(深入)”;
int a = 10;
int b = 0;
if (b != 0) {
int result = a / b;
System.out.println(result);
} else {
System.out.println("除数不能为零");
}
⚠️ 不推荐方式(把异常当流程控制):
try {
int result = a / b; // 一旦 b==0,直接崩溃到这里
} catch (ArithmeticException e) {
System.out.println("计算出错:" + e.getMessage()); // 输出 "/ by zero"
}
这种写法掩盖了本可通过逻辑避免的问题,降低可读性和性能。
浮点数除零的区别(顺便澄清误区)
float 和 double 除零不会报错:
-
10.0f / 0.0f→ 返回Float.POSITIVE_INFINITY -
-5.0 / 0.0→ 返回Double.NEGATIVE_INFINITY -
0.0 / 0.0→ 返回Double.NaN
所以,如果你需要“容错除法”,可考虑转为 double 运算并检查结果是否为 Infinity 或 NaN,但这不适用于整数业务逻辑(如分页、计数、索引计算等)。


















