为什么在这里没有触发除零的异常?

时间:2012-08-26 14:11:43

标签: java exception

这是对Why is this exception is not printed? Why is it showing an error? )的跟进问题

在下面的代码中,为什么没有触发ArithmeticException?

class Exp
{
    public static void main(String args[])
    {
        float d,a=1;
        try
        {
            d=0;
            a=44/d; //no exception triggered here.. why?
            System.out.print("It's not gonna print: a="+a); 
        }
        catch(ArithmeticException e)
        {
            System.out.println("Print exception: "+e);
        }
    }
} 

而是输出:

It's not gonna print: a=Infinity

会发生什么?

2 个答案:

答案 0 :(得分:27)

除以零会抛出整数值的异常,但不会抛出浮动值。这在JLS #15.17.2

中定义
  

浮点除法的结果由IEEE 754算法的规则决定:
  [...]

     
      
  • 将零非零有限值除以零会产生有符号无穷大。该标志由上述规则确定。
  •   

如果您将ad的类型更改为int,您将获得例外。

答案 1 :(得分:7)

因为Divide by zero适用于整数而非浮动,因为JLS

你会得到输出

Its not gonna printed a=Infinity

因为这被计算为Infinity

如果您想要查看例外,只需更改

a=44/d;

到这个

a=44/0;