2012-08-26 8 views
15

이것은 후속 질문입니다. Why is this exception is not printed? Why it's showing an error?

아래의 코드에서 ArithmeticException이 트리거되지 않는 이유는 무엇입니까? 어떤 일이 발생여기서 예외가 트리거되지 않는 이유는 무엇입니까?

Its not gonna printed a=Infinity 

다음과 같이

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

대신 출력이 온다?

답변

27

0으로 나눈 값은 정수 값에 대해서는 예외를 발생 시키지만 부동 값에는 예외를 발생시킵니다. 이것은 JLS #15.17.2에 정의되어

부동 소수점 나눗셈의 결과가 IEEE 754 산술의 규칙에 의해 결정된다 :
[...] 비제 유한 값

  • 부 0으로하면 부호있는 무한대가됩니다. 서명은 위에 명시된 규칙에 따라 결정됩니다. 당신이 intad의 종류를 변경하는 경우

, 당신은 예외를 얻을 것이다.

7

Divide by zero정수에 적용되지 JLS

에 따라 수레이이 Infinity

로 계산되기 때문에 당신이

Its not gonna printed a=Infinity 

으로 출력을 얻을 것이다 그리고 경우에 당신이 원하기 때문에 예외가 표시 그냥 변경

a=44/0; 
a=44/d; 

관련 문제