2013-02-21 91 views
6

सामान्य रूप से, जावा में अपवादों को संभालने के दो तरीके हैं।क्यों RuntimeException को एक स्पष्ट अपवाद हैंडलिंग की आवश्यकता नहीं है?

  1. जोड़ें विधि हस्ताक्षर में घोषणा फेंकता आज़माएं/कैच ब्लॉक के साथ
  2. चारों ओर।

हालांकि, मैंने देखा है कि कुछ अपवाद, विशेष रूप से RuntimeException से प्राप्त होने वाले कुछ अपवादों को ऐसे स्पष्ट अपवाद हैंडलिंग की आवश्यकता नहीं है।

उदाहरण के लिए, मैंने नीचे एक नमूना विधि बनाई है और उन लोगों के लिए "आवश्यक नहीं" चिह्नित किया गया है जिन्हें स्पष्ट अपवाद हैंडलिंग की आवश्यकता नहीं है।

public void textException(){ 
    int i = (new Random()).nextInt(100); 

    switch (i){ 
    case 1: 
     throw new NullPointerException(); //Not required 
    case 2: 
     throw new NumberFormatException(); //Not required 
    case 3: 
     throw new RuntimeException();  //Not required 
    case 4:   
     throw new ClassNotFoundException(); //Required 
    case 5: 
     throw new IOException();   //Required 
    case 6: 
     throw new Exception();    //Required 
    default: 
     return; 
    } 
} 

मैंने देखा है कि Exception से RuntimeException इनहेरिट करती है।

यह क्यों है कि RuntimeException को संकलित करने के लिए स्पष्ट रूप से पकड़ा जाने की आवश्यकता नहीं है जबकि अन्य Exceptions करते हैं?

+3

जिन्हें जावा में चेक किए गए और अनचेक अपवाद कहा जाता है। और इन पर कई बार चर्चा की गई है http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation –

+0

अपने फेंकने वाले खंड में घोषित करने के लिए एक विधि की आवश्यकता नहीं है RuntimeException के किसी उप-वर्ग जिसे विधि के निष्पादन के दौरान फेंक दिया जा सकता है लेकिन पकड़ा नहीं जाता है। – sudmong

उत्तर

1

जावा के लिए, रनटाइम अपवाद को सिस्टम अपवाद माना जाता है, आम तौर पर, यह पुनर्प्राप्त करने योग्य नहीं है, इसलिए आपको विधि पर घोषणा को फेंकने की आवश्यकता नहीं है या इसे संभालने के लिए पकड़ने का प्रयास करें। हालांकि, अपवाद को एप्लिकेशन अपवाद माना जाता है, यह पुनर्प्राप्त करने योग्य है।

1

"यदि कोई ग्राहक किसी अपवाद से पुनर्प्राप्त होने की अपेक्षा की जा सकती है, तो इसे एक अपवाद से पुनर्प्राप्त करने के लिए कुछ भी नहीं कर सकता है, अगर इसे अपरिचित अपवाद बनाते हैं।" http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html