java中整数除零抛出arithmeticexception,浮点数除零返回infinity或nan;应优先校验除数非零,必要时用try-catch捕获并处理,或封装安全除法工具类。
java中除以零会抛出arithmeticexception,这是运行时异常,必须在代码中显式捕获或声明,不能靠编译器强制检查。关键在于:整数除零一定报错,浮点数除零则返回特殊值(如infinity或nan),不抛异常。
区分整数与浮点数除零行为
Java对int、long等整数类型除零严格禁止,直接抛出ArithmeticException;而float和double遵循IEEE 754标准,结果为无穷大或非数字,不会中断执行。
-
10 / 0→ 抛出ArithmeticException: / by zero -
10.0 / 0.0→ 返回Infinity -
0.0 / 0.0→ 返回NaN
用try-catch捕获并处理整数除零
当无法提前确保除数非零(例如用户输入、配置读取、动态计算),应使用try-catch捕获异常,并提供有意义的反馈或默认逻辑。
- 捕获范围尽量精准,只包可能出错的语句,避免包裹过多无关代码
- 不要空catch(即不写任何处理逻辑),至少记录日志或返回合理默认值
- 示例:
try {<br> result = dividend / divisor;<br>} catch (ArithmeticException e) {<br> System.err.println("除数不能为零");<br> result = 0; // 或抛出自定义业务异常<br>}
预防优于捕获:提前校验除数
多数情况下,应在运算前主动判断除数是否为零,避免异常发生——这比异常处理更高效,也更符合清晰编码习惯。
- 对已知变量,直接用
if (divisor != 0)判断 - 对方法参数,可在方法入口做校验,必要时抛出
IllegalArgumentException(语义更准确) - 对集合或数据库查询结果,注意空值或默认值可能隐含零,需一并检查
自定义算术工具类增强安全性
可封装常用安全除法逻辑,统一处理边界情况,减少重复判断。
- 提供返回
Optional<integer></integer>的方法,让调用方决定如何处理无结果情况 - 支持默认值 fallback,如
safeDivide(10, 0, -1)返回-1 - 对浮点数也可封装,统一处理
Infinity和NaN(例如用Double.isFinite()判断)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











