2013-12-09 8 views
15

अपवाद पदानुक्रम में, RuntimeException और Error के वंशज रनटाइम अपवाद/त्रुटियां हैं।रनटाइम अपवाद और त्रुटि

दोनों के बीच अंतर यह है: RuntimeException के तहत उन गरीब प्रोग्रामिंग/डिजाइन की वजह से होते हैं, और Error के उन जो कि/डेवलपर द्वारा नियंत्रित नहीं किया जाना चाहिए नहीं किया जा सकता है कर रहे हैं।

आवेदन के भीतर एक अपवाद है, उदाहरण के लिए , कोडिंग जब व्यापार तर्क में कुछ होता है एक अपवाद फेंकने के लिए के लिए, RuntimeException बढ़ा दिया गया है।

सवाल यह है, वास्तव में क्या RuntimeException का विस्तार और Error विस्तार के बीच अंतर है - बुरा व्यवहार कि विस्तार Error छोड़कर जाता है?

+0

कौन कहता है कि यह * खराब अभ्यास है? निश्चित रूप से ऐसा कुछ नहीं जो आप हर दिन करते हैं, लेकिन मुझे संदेह नहीं है कि ऐसे मामले हैं जहां इसे योग्यता दी जा सकती है। –

+0

@HotLicks यहोशू बलोच ने अपनी पुस्तक प्रभावी जावा में ऐसा करने की सिफारिश की गई है: "जब जावा भाषा विशिष्टता यह आवश्यकता नहीं है, इस बात की प्रबल परंपरा है कि त्रुटियों JVM द्वारा उपयोग के लिए आरक्षित हैं संसाधन की कमी, अपरिवर्तनीय विफलताओं इंगित करने के लिए है, या अन्य की स्थिति, यह निष्पादन जारी रखने के लिए असंभव बना है। इस सम्मेलन के लगभग सार्वभौमिक स्वीकृति को देखते हुए यह सबसे अच्छा किसी भी नए त्रुटि उपवर्गों लागू करने के लिए नहीं है। इसलिए, ** अनियंत्रित throwables के सभी आप को लागू उपवर्ग चाहिए ** 'RuntimeException' (प्रत्यक्ष या परोक्ष रूप से)।" – alfasin

+0

@alfasin - तो सिस्टम घड़ी को पुनर्प्राप्त करते समय XYZ ऑपरेटिंग सिस्टम हार्डवेयर विफलता का पता लगा सकता है, लेकिन इसे उस त्रुटि को कॉल नहीं करना चाहिए? एक एपीआई जो रासायनिक संयंत्र में वाल्व को नियंत्रित करता है, हार्डवेयर विफलता का पता लगा सकता है और फिर उसे एक त्रुटि नहीं कहनी चाहिए? –

उत्तर

15

Error और RuntimeException दोनों अनचेक अपवाद हैं, जिसका अर्थ है कि यह प्रोग्राम के साथ एक दोष दिखाता है, और आमतौर पर पकड़ा नहीं जाना चाहिए। (NullPointerException, IndexOutOfBoundsException, आदि)

मुझे लगता है कि दोनों के बीच मुख्य अंतर यह है RuntimeException से संकेत मिलता है, वहाँ इस कार्यक्रम के साथ एक त्रुटि है कि है और एक Error कुछ है कि घातक लेकिन कार्यक्रम के नियंत्रण से बाहर है। (OutOfMemorryError, ThreadDeath, आदि)

इसलिए उपवर्गीकरण एक Error बुरा व्यवहार है, क्योंकि एक त्रुटि आमतौर पर कुछ है कि क्रम पर अपने कार्यक्रम द्वारा निर्धारित किया जा सकता है नहीं है। अपने कार्यक्रम में, आपको कुछ फेंकने की ज़रूरत है, Exception का उपयोग करें।

+1

मैं पहले से ही इन्हें क्यू – Roam

+0

में कह रहा हूं, मैंने उस हिस्से को बोल्ड किया जो मुझे लगता है कि आपके प्रश्न का उत्तर देना चाहिए – Pita

+1

इसे फिर से बोल्ड करें। शायद इस बार यह क्यू – Roam

6

क्यू बिल्कुल RuntimeException विस्तार और कहा कि विस्तार त्रुटि को छोड़कर Error-- विस्तार बुरा व्यवहार है के बीच अंतर क्या है, है?

आपने पहले से ही मुख्य मतभेदों का उल्लेख किया है। The Java Language Specification says the same thing in different termsError के लिए, यह कहा गया है

Error सभी अपवाद है जहाँ से साधारण कार्यक्रमों आमतौर पर ठीक होने की उम्मीद नहीं कर रहे हैं की सुपर क्लास है।

RuntimeException के लिए, यह कहा गया है

वर्ग RuntimeException अपवाद का एक सीधा उपवर्ग है। RuntimeException सभी अपवादों का सुपरक्लास है जो अभिव्यक्ति मूल्यांकन के दौरान कई कारणों से फेंक दिया जा सकता है, लेकिन वसूली अभी भी संभव हो सकती है

क्या आप इन उद्धरण से दूर रखना चाहिए कि आप आमतौर पर

try { 
    ... 
} catch (Exception e) { // catches RuntimeException 
    ... 
} 

एक पकड़ने के रूप में सभी मामले देखेंगे के बाद से ExceptionRuntimeException का एक सुपर प्रकार है। लेकिन आप लगभग कभी नहीं देख पाएंगे (मैंने इसे कभी नहीं देखा है)

try { 
    ... 
} catch (Error e) { 
    ... 
} 
संबंधित मुद्दे