ArithmeticException仅在整数类型(int、long、short、byte)除法或取模除零时抛出;浮点数除零返回Infinity或NaN,不抛异常;应优先校验分母非零而非依赖try-catch。
Java中的算术异常(ArithmeticException)主要在整数运算中发生非法操作时抛出,最典型的是整数除以零。它属于运行时异常(RuntimeException),无需强制捕获,但若未处理会导致程序中断。
该异常仅在**整数类型**(int、long、short、byte)的除法
或取模运算中出现除零行为时抛出。浮点数(float、double)除以零不会抛异常,而是返回Infinity或NaN。
int a = 5 / 0; → 抛出 ArithmeticException: / by zero
int b = 10 % 0; → 同样抛出异常double c = 5.0 / 0.0; → 返回 Infinity,不抛异常int d = Integer.MIN_VALUE / -1; → 在某些JVM版本中可能触发(溢出导致的未定义行为,但Java规范不保证抛此异常;实际中一般不会)虽然不是必须捕获,但在涉及用户输入、配置值或外部数据的除法场景中,应主动预防。推荐先校验分母是否为零,而非依赖try-catch——更高效且语义清晰。
if (divisor != 0) { result = dividend / divisor; }
try-catch:
try {
int result = 100 / userInput;
} catch (ArithmeticException e) {
System.err.println("除数不能为零,请检查输入");
}
很多人误以为所有“数学错误”都会触发该异常,其实不然:
NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException,和ArithmeticException无关Math.sqrt(-1) 返回 NaN,不抛异常BigInteger)中除零会抛ArithmeticException,这是特例,因其实现明确约定在工具方法或API中处理除法时,可封装安全除法逻辑:
Optional表示可能无结果safeDivide(10, 0, 1)返回1