2012-08-26 27 views
15

Esta es una pregunta de seguimiento de Why is this exception is not printed? Why it's showing an error?

Aquí en código de abajo por qué el ArithmeticException no está disparada?¿Por qué la excepción no se desencadena aquí?

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); 
     } 
    } 
} 

lugar la salida proviene de la siguiente manera:

Its not gonna printed a=Infinity 

lo que sucede?

Respuesta

27

Una división por cero arroja una excepción para los valores enteros, pero no para los valores flotantes. Esto se define en la JLS #15.17.2:

El resultado de una división de punto flotante está determinada por las reglas de la aritmética IEEE 754:
[...]

  • División de un valor finito distinto de cero por un cero da como resultado un infinito con signo. El signo está determinado por la regla establecida anteriormente.

Si cambia el tipo de a y d a int, obtendrá una excepción.

7

Debido Divide by zero se aplica a enteros y no flota según JLS

y que se obtendría de salida como

Its not gonna printed a=Infinity 

ya que este se calcula como Infinity

Y en caso de que quiera ver una excepción acaba de cambiar

a=44/d; 

a este

a=44/0; 
Cuestiones relacionadas