java中避免除以零异常需区分整数与浮点数:整数除零必抛arithmeticexception,须前置==0校验;浮点数除零得infinity/nan,应用double.compare、isinfinite、isnan综合判断;推荐封装安全工具类并配单元测试,慎用try-catch仅作兜底。

Java 中避免除以零异常,核心是区分整数与浮点数行为,并坚持“预防为主、捕获为辅”的原则。整数除零一定抛 ArithmeticException,必须主动拦截;浮点数除零不抛异常,但结果可能是 Infinity 或 NaN,业务上仍需按需校验。
整数类型:运算前严格判断除数是否为零
对 int、long 等整型,直接用 == 0 判断最安全、高效:
- 在方法入口或关键计算前加
if (divisor == 0)校验 - 校验失败时,可抛
IllegalArgumentException(语义更准确),或返回默认值、Optional.empty() - 特别注意取模运算
%,它和除法一样,除数为零也会触发ArithmeticException
浮点类型:用标准工具方法判断边界值
double 和 float 除零不会抛异常,但可能产生 Infinity 或 NaN,影响后续逻辑:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 避免用
== 0.0直接比较(因-0.0 == 0.0为true,但部分场景需区分) - 推荐使用
Double.compare(divisor, 0.0) == 0,再结合Double.isNaN()和Double.isInfinite()综合判断 - 若业务不允许无穷或无效值,应在校验层统一拦截并提示
封装安全除法工具类,提升复用性与一致性
把校验逻辑收口到工具类中,减少重复代码和疏漏:
- 提供重载方法支持
int、long、double等类型 - 返回
Optional<integer></integer>表示“可能无结果”,调用方自主决定如何处理 - 支持 fallback 参数,如
safeDivide(10, 0, -1)直接返回默认值 - 配套单元测试,覆盖
0、负数、极值、NaN等边界情况
慎用 try-catch,仅作兜底而非主逻辑
try-catch(ArithmeticException) 成本高、掩盖设计缺陷,只适用于极少数动态表达式解析等不可预知场景:
- catch 块内不能空着,至少记录日志或转为用户友好的提示
- 不要包裹大段无关代码,只包真正可能除零的单条运算语句
- 优先搭配前置校验——即先
if再try,形成双保险 - 绝对不要
catch Exception或Throwable来笼统处理,会干扰问题定位
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










