Java 中的 ArithmeticException

10 Sept 2024 | 4 分钟阅读

异常处理是处理运行时错误的最强大机制之一,以便能够维持应用程序的正常流程。在 Java 中,异常是一种反常情况。Java 编程语言定义了各种异常。在本节中,我们将讨论 Java 中一个重要的异常,即算术异常

算术异常是一种代码的异常结果或未检查错误,当代码在运行时出现错误的数学或算术运算时,就会抛出或引发该异常。当分数的除数为 0 且 JVM 无法计算出结果时,就会出现运行时问题,也称为异常;因此,程序执行终止,并引发异常。请注意,在引发异常的点,程序终止。但是,该点之前的代码已执行,并且显示了适当的结果。

算术异常结构

算术异常的基类是 java.lang.ArithmeticException,它是 java.lang.RuntimeException 的子类,而 java.lang.RuntimeException 又是 java.lang.Exception 的子类。

算术异常构造函数

  1. ArithmeticException(): 用于定义一个不带参数的算术异常。
  2. ArithmeticException(String s): 用于定义一个带一个字符串参数的算术异常。

算术异常如何发生?

算术异常可能发生的两种情况如下。

  1. 当我们执行除法运算,并且 0 用作除数时,即 0 作为分母出现。
  2. Big Decimal 的一个非终止的长小数。

除以 0

文件名: ArithmeticException.java

输出

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at ArithmeticException.divide(ArithmeticException.java:6)
	at ArithmeticException.main(ArithmeticException.java:16)

非终止的 Big Decimal

文件名: ArithmeticException1.java

输出

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
	at java.base/java.math.BigDecimal.divide(BigDecimal.java:1766)
	at ArithmeticException1.main(ArithmeticException1.java:9)

说明:在上面的程序中,Big Decimal 类不知道要显示的除法后的确切输出。这是因为输出是非终止的十进制扩展。一种解决方法是提供限制。例如,我们可以在程序中明确说明输出应限制在 6 位小数。请看下面的程序。

文件名: ArithmeticException2.java

输出

0.647058

处理算术异常

我们可以使用 try-catch 块自行处理算术异常。请看下面的程序。

文件名: HandleArithmeticException.java

输出

Should avoid dividing by 0 java.lang.ArithmeticException: / by zero

对于非终止的十进制扩展,我们所要做的就是将发生除法的行包装在 try 块中。

文件名: HandleArithmeticException1.java

输出

Should avoid dividing by an integer that leads to non-terminating decimal expansion. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.