Java中整数除零抛ArithmeticException(运行时异常),必须try-catch处理,否则崩溃;浮点数除零返回Infinity或NaN,需用Double.isInfinite()/isNaN()判断,推荐除前校验而非依赖异常。

Java 中整数除零会直接抛出 ArithmeticException,属于运行时异常(RuntimeException),**无法用 checked 异常的方式强制捕获**,但可以主动用 try-catch 捕获处理;而浮点数除零(如 double/float)不会报异常,而是返回 Infinity 或 NaN,需单独判断。
整数除零:必须 try-catch,否则程序崩溃
int、long、short、byte 等整数类型执行 / 或 % 时,若除数为 0,JVM 立即抛出 ArithmeticException,不继续执行后续代码。
- 该异常继承自
RuntimeException,编译期不强制要求处理 - 但生产环境强烈建议显式捕获,避免服务中断或日志缺失
- 不能用 throws 声明推给调用方“解决”,因为调用方也不被强制处理
正确捕获整数除零的写法
在可能触发除零的位置包裹 try-catch,捕获 ArithmeticException,并给出有意义的响应或日志:
int a = 10;
int b = 0;
try {
int result = a / b; // 这里抛出 ArithmeticException
} catch (ArithmeticException e) {
System.err.println("除数不能为零!当前除数:" + b);
// 可返回默认值、抛自定义业务异常、记录监控指标等
}
浮点数除零:不抛异常,但要主动检查结果
double 和 float 除零不会报错,而是按 IEEE 754 规范返回特殊值:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
-
10.0 / 0.0→Infinity(正无穷) -
-10.0 / 0.0→-Infinity(负无穷) -
0.0 / 0.0→NaN(非数字) - 判断方式:
Double.isInfinite(x)、Double.isNaN(x)
更稳妥的做法:除前校验,而非只靠捕获
比起等异常发生再处理,提前校验除数更高效、更可控:
if (divisor == 0) {
throw new IllegalArgumentException("除数不可为零");
// 或 return Optional.empty(); / 返回错误码;等业务约定方式
}
int result = dividend / divisor;
尤其在工具方法、公共 API、数学计算模块中,优先校验比依赖异常机制更清晰、性能更好、也利于单元测试覆盖。

















