Java除以零不会抛出ArithmeticException – 为什么?

为什么这段代码不会抛出ArithmeticException ? 看一看:

 public class NewClass { public static void main(String[] args) { // TODO code application logic here double tab[] = {1.2, 3.4, 0.0, 5.6}; try { for (int i = 0; i < tab.length; i++) { tab[i] = 1.0 / tab[i]; } } catch (ArithmeticException ae) { System.out.println("ArithmeticException occured!"); } } } 

我不知道!

为什么你不能自己检查它,如果你想要的话就抛出exception。

  try { for (int i = 0; i < tab.length; i++) { tab[i] = 1.0 / tab[i]; if (tab[i] == Double.POSITIVE_INFINITY || tab[i] == Double.NEGATIVE_INFINITY) throw new ArithmeticException(); } } catch (ArithmeticException ae) { System.out.println("ArithmeticException occured!"); } 

IEEE 754将1.0 / 0.0定义为无穷大,将-1.0 / 0.0为-Infinity,将0.0 / 0.0为NaN。

BTW浮点也有-0.0 ,因此1.0/ -0.0-Infinity

整数算术没有任何这些值,而是抛出exception。

要检查所有可能的值,包括可能产生非限定数的NaN,0.0,-0.0,您可以执行以下操作。

 if (Math.abs(tab[i] = 1 / tab[i]) < Double.POSITIVE_INFINITY) throw new ArithmeticException("Not finite"); 

那是因为你正在处理浮点数。 除以零返回Infinity ,类似于NaN (不是数字)。

如果要防止这种情况,则必须在使用之前测试tab[i] 。 然后你可以抛出自己的exception,如果你真的需要它。

0.0是双字面值,这不被视为绝对零! 没有例外,因为它被认为是足够大的双变量来保存代表无穷大的值!

如果除以浮零,Java不会抛出exception。 只有在除以整数零而不是双零时,它才会检测到运行时错误。

如果除以0.0,结果将为INFINITY。

除以零

  1. 如果将double除以0,JVM将显示Infinity

     public static void main(String [] args){ double a=10.00; System.out.println(a/0); } 

    控制台: Infinity

  2. 如果将int除以0,则JVM将抛出算术exception

     public static void main(String [] args){ int a=10; System.out.println(a/0); } 

    控制台: Exception in thread "main" java.lang.ArithmeticException: / by zero