Почему исключение не запускается здесь?

Это следующий вопрос Почему это исключение не печатается? Почему он показывает ошибку?

Здесь, в приведенном ниже коде, почему исключение 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("Its not gonna printed a="+a); 
        }
        catch(ArithmeticException e)
        {
            System.out.println("Print exception"+e);
        }
    }
} 

Вместо этого вывод поступает следующим образом:

Its not gonna printed a=Infinity

что происходит?

Ответы

Ответ 1

Деление на ноль порождает исключение для целочисленных значений, но не для плавающих значений. Это определено в JLS # 15.17.2:

Результат деления с плавающей запятой определяется правилами арифметики IEEE 754:
[...]

  • Разделение ненулевого конечного значения на нуль приводит к отмеченной бесконечности. Знак определяется указанным выше правилом.

Если вы измените тип a и d на int, вы получите исключение.

Ответ 2

Поскольку Divide by zero применяется к целым числам, а не поплавкам по JLS

и вы получите результат как

Its not gonna printed a=Infinity

так как это вычисляется как Infinity

И если вы хотите увидеть исключение, просто измените

a=44/d;

к этому

a=44/0;