在Java里ArithmeticException一般在什么场景出现_Java算术异常说明

发布时间 - 2026-01-29 00:00:00    点击率:
ArithmeticException最典型场景是整数类型(int、long、short、byte)除以零或模零,立即抛出“/ by zero”;浮点数除零返回Infinity或NaN不抛异常;BigInteger和BigDecimal除零也抛该异常,消息更具体。

除零操作触发 ArithmeticException

Java 中最典型的 ArithmeticException 场景是整数类型的除零,比如 intlongshortbyte 作被除数时除以 0。注意:这和浮点数不同——doublefloat 除零不会抛异常,而是返回

InfinityNaN

  • 10 / 0 → 立即抛出 ArithmeticException: / by zero
  • 0 / 0 → 同样抛出 / by zero(不是 NaN
  • 10L / 0L(short)5 / (short)0 同样触发
  • Integer.MIN_VALUE / -1 在某些 JVM 实现中也可能触发(溢出导致的未定义行为,但 OpenJDK 通常不抛此异常;不过明确写死该表达式时需警惕)

BigIntegerBigDecimal 的除零行为差异

这两个类的除法方法对零除的处理更严格,且异常类型仍是 ArithmeticException,但消息更具体:

  • BigInteger.divide(BigInteger.ZERO)ArithmeticException: division by zero
  • BigDecimal.divide(BigDecimal.ZERO) → 同样抛 division by zero(注意:若用带 RoundingMode 的重载,如 divide(divisor, scale, RoundingMode),除零仍会抛异常,不因指定舍入模式而绕过)
  • BigDecimal.divide(...) 若分母非零但结果无限不循环(如 1/3 未指定精度),会抛 ArithmeticException: Non-terminating decimal expansion —— 这也属于同一异常类,常被忽略

容易误判的“非算术”场景

有些看似数学的操作其实不会触发 ArithmeticException,反而可能抛其他异常或静默失败:

  • int x = Integer.parseInt("abc") → 抛 NumberFormatException,不是 ArithmeticException
  • Math.sqrt(-1.0) → 返回 NaN,不抛异常
  • new int[-1] → 抛 NegativeArraySizeException,继承自 RuntimeException,但和算术无关
  • 10 % 0(取模零)→ 和除零一样,抛 / by zero;但 10.0 % 0.0 返回 NaN
public class Demo {
    public static void main(String[] args) {
        try {
            System.out.println(5 / 0); // 触发
        } catch (ArithmeticException e) {
            System.out.println(e.getMessage()); // 输出 "/ by zero"
        }

        try {
            System.out.println(new BigInteger("10").divide(BigInteger.ZERO));
        } catch (ArithmeticException e) {
            System.out.println(e.getMessage()); // 输出 "division by zero"
        }
    }
}
真正要留心的是:**整数除零必炸,浮点除零不炸,而 BigDecimal 除零和无限小数都归在同一异常下**。很多线上 ArithmeticException 其实来自没设精度的 BigDecimal.divide,而不是眼见的“除以零”。


# java  # ai  # jvm  # Integer  # Float  # math  # int  # double  # 循环  # 继承  # 整数类型  # 抛出  # 的是  # 最典型  # 浮点数  # 浮点  # 这也  # 这两个  # 仍是  # 线上  # 中也 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速打造个性化非模板自助建站?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  java中使用zxing批量生成二维码立牌  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  如何快速登录WAP自助建站平台?  如何快速重置建站主机并恢复默认配置?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  想要更高端的建设网站,这些原则一定要坚持!  如何快速选择适合个人网站的云服务器配置?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  黑客入侵网站服务器的常见手法有哪些?  免费网站制作appp,免费制作app哪个平台好?  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  高性能网站服务器配置指南:安全稳定与高效建站核心方案  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何在不使用负向后查找的情况下匹配特定条件前的换行符  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Android自定义listview布局实现上拉加载下拉刷新功能  如何在建站之星绑定自定义域名?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何自定义建站之星模板颜色并下载新样式?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  香港网站服务器数量如何影响SEO优化效果?  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  如何用PHP工具快速搭建高效网站?  如何有效防御Web建站篡改攻击?  黑客如何通过漏洞一步步攻陷网站服务器?  如何安全更换建站之星模板并保留数据?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  北京网站制作的公司有哪些,北京白云观官方网站?  Laravel如何实现API版本控制_Laravel版本化API设计方案  5种Android数据存储方式汇总  中山网站推广排名,中山信息港登录入口?  Linux网络带宽限制_tc配置实践解析【教程】  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  香港服务器如何优化才能显著提升网站加载速度?  详解jQuery停止动画——stop()方法的使用  Thinkphp 中 distinct 的用法解析  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  如何彻底删除建站之星生成的Banner?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?