Почему исключение не запускается здесь?
Это следующий вопрос Почему это исключение не печатается? Почему он показывает ошибку?
Здесь, в приведенном ниже коде, почему исключение 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;