2012-08-26 25 views
15

ta jest kontynuacją kwestia Why is this exception is not printed? Why it's showing an error?

Tutaj w poniższym kodzie dlaczego ArithmeticException nie jest wyzwalany?Dlaczego wyjątek nie jest tutaj uruchamiany?

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

Zamiast wyjście jest jak następuje:

Its not gonna printed a=Infinity 

co się dzieje?

Odpowiedz

27

Podział przez zero zgłasza wyjątek dla wartości całkowitych, ale nie dla wartości zmiennoprzecinkowych. Jest to określone w JLS #15.17.2:

Skutkiem podziału zmiennoprzecinkowej określa się według zasad arytmetyki IEEE 754:
[...]

  • Podział skończoną wartość niezerową przez zero powoduje podpisanie nieskończoności. Znak jest określony przez regułę podaną powyżej.

Jeśli zmienić typ a i d do int, dostaniesz wyjątek.

7

Ponieważ Divide by zero dotyczy całkowitymi i nie pływa zgodnie JLS

i co można uzyskać wyjście jako

Its not gonna printed a=Infinity 

ponieważ ta jest obliczana jako Infinity

A w przypadku, gdy chcesz zobacz wyjątek po prostu zmień

a=44/d; 

do tego

a=44/0; 
Powiązane problemy