讲师中心 微信公众号
AI工具推荐 视频效率加速

Java里的ArithmeticException怎么触发_除以零等数学运算限制

梦芳酱_7921

梦芳酱_7921

发布时间:2026-02-28 12:20:54

|

1064人浏览过

|

来源于php中文网

原创

java里的arithmeticexception怎么触发_除以零等数学运算限制

Java中哪些操作会直接抛出ArithmeticException

只有整数类型的除法(/)和取模(%)在除数为零时,JVM 会强制抛出 ArithmeticException;浮点数运算不会——它返回 Infinity 或 NaN,不报异常。

  • int a = 5 / 0; → 立即抛 ArithmeticException: / by zero
  • long b = 10 % 0; → 同样抛 ArithmeticException: / by zero
  • double c = 5.0 / 0.0; → 结果是 Infinity,无异常
  • float d = 0.0f / 0.0f; → 结果是 NaN,无异常

为什么ArithmeticException是运行时异常,且不能靠编译器提前发现

因为除数是否为零,往往取决于运行时变量值,编译器无法静态判定。即使写成 int x = 0; int y = 5 / x;,JVM 仍要等到执行到该字节码指令时才检查。

  • 编译阶段只校验语法和类型,不计算表达式结果
  • 常量折叠(如 5 / 0)在部分 JDK 版本中会被编译器拦截并报错,但这是特例,不是规范保证
  • 一旦涉及变量、方法返回值、用户输入等,就完全逃逸编译检查

常见踩坑:误以为try-catch能覆盖所有“数学错误”

ArithmeticException 只管整数除零和模零;其他数值问题比如溢出(Integer.MAX_VALUE + 1)、下溢、精度丢失,都不会触发它。

sc-java-to-ts-interface
sc-java-to-ts-interface

将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。

下载
  • int overflow = Integer.MAX_VALUE + 1; → 结果是 Integer.MIN_VALUE,静默回绕,无异常
  • new BigDecimal("1").divide(new BigDecimal("3"), 2, RoundingMode.HALF_UP) → 若未指定精度可能抛 ArithmeticException,但这是 BigDecimal 自己的逻辑,和 JVM 整数运算是两回事
  • 用 Math.multiplyExact() 或 Math.addExact() 才会主动检测溢出并抛 ArithmeticException,但这属于显式调用,不是自动行为

实际防御建议:什么时候该检查,什么时候可放心忽略

对整数除法/取模,只要除数来源不可控(参数、配置、数据库字段、用户输入),就必须手动判零;若确定是编译期常量或已验证过的内部逻辑(如循环索引非零),可不加检查。

立即学习“Java免费学习笔记(深入)”;

  • 接口入参做除法前:先 if (divisor == 0) throw new IllegalArgumentException("divisor must not be zero");
  • 避免在 catch (ArithmeticException e) 里吞掉异常再返回默认值——掩盖了本该被发现的逻辑缺陷
  • 注意 OptionalInt 或返回 Double 等替代方案,有时比硬扛异常更清晰,尤其当“除零”在业务上代表“无定义”而非错误时
整数除零是 JVM 层面的硬限制,没法绕过,也没法用注解或配置关掉;真正容易被忽略的是——你以为自己在处理“数学异常”,其实只是在处理一个特定整数指令的失败信号,和其他数值问题毫无关系。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

6927

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

804

2025.10.23

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6184

2023.10.24

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6759

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3265

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4228

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2885

2025.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4228

2025.08.29

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn