2012-08-26 24 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

शून्य द्वारा एक विभाजन पूर्णांक मानों के लिए अपवाद फेंकता है, लेकिन फ्लोटिंग मानों के लिए नहीं। यह JLS #15.17.2 में परिभाषित किया गया है:

एक फ्लोटिंग प्वाइंट विभाजन का परिणाम आईईईई 754 गणित के नियमों से निर्धारित होता है:
[...] एक अशून्य परिमित मूल्य की

  • डिवीजन शून्य परिणामों से एक हस्ताक्षरित अनंतता में परिणाम। संकेत ऊपर वर्णित नियम द्वारा निर्धारित किया जाता है।

आप int को a और d के प्रकार बदलते हैं, तो आप एक अपवाद मिल जाएगा।

7

Divide by zeroपूर्णांकों पर लागू होता है और प्रति JLS

के रूप में नहीं तैरता है और आप के रूप में

Its not gonna printed a=Infinity 

उत्पादन मिलेगा क्योंकि इस Infinity

के रूप में गणना की जाती है और मामले में आप करना चाहते हैं क्योंकि एक अपवाद देखें बस

बदलें
a=44/d; 
इस

a=44/0; 
को

संबंधित मुद्दे