2010-04-23 17 views
30

के बीच अंतर यह एक साक्षात्कार प्रश्न था। अनचेक अपवाद और त्रुटि के बीच मुख्य अंतर क्या है क्योंकि दोनों पकड़े नहीं जाते हैं? वे कार्यक्रम को समाप्त कर देंगे।अनचेक अपवाद या रनटाइम अपवाद

+4

आपका शीर्षक प्रश्न से कुछ अलग कहता है। क्या आप RuntimeException और त्रुटि या अनचेक और रनटाइम अपवाद के बीच के अंतर के बारे में जानना चाहते हैं? –

+2

यह नहीं है * एक्स ** या ** वाई * के बीच अंतर, लेकिन यह * एक्स ** और ** वाई * के बीच अंतर है। और वास्तव में, यह अनचेक अपवाद और रनटाइम अपवाद या अनचेक अपवाद और त्रुटि के बीच है? – BalusC

+0

ऐसा लगता है कि इस साक्षात्कार के सवाल से बहुत कुछ पूछा जा रहा है: http://stackoverflow.com/questions/2693329/difference-between-errors-and-unchecked-exceptions-in-java – justkt

उत्तर

8

जावाडॉक्स इन्हें बहुत अच्छी तरह से जोड़ता है।

java.lang.RuntimeException:

RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.

A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught.

java.lang.Error:

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a "normal" condition, is also a subclass of Error because most applications should not try to catch it.

A method is not required to declare in its throws clause any subclasses of Error that might be thrown during the execution of the method but not caught, since these errors are abnormal conditions that should never occur.

ध्यान दें कि "अनियंत्रित अपवाद" महज एक RuntimeException के लिए एक पर्याय है।

+0

http://java.sun.com/docs/books/tutorial/essential/exceptions/runtime .html differeneces – ChadNC

+1

का एक सभ्य वर्णन भी प्रदान करता है, मुझे लगता है कि अनचेक अपवाद लिखना 'रनटाइम अपवाद' का समानार्थी है (और यह सच नहीं है)। –

+0

@ पास्कल, कैसा है? मुझे लगता है कि जब भी कोई जावा में "अनचेक अपवाद" को संदर्भित करता है तो वे RuntimeException के कुछ उप-वर्ग का जिक्र कर रहे हैं, नहीं? –

1

RuntimeExceptions और OutOfMemoryError जैसे त्रुटियों को पकड़ने की आवश्यकता नहीं है और जब तक वे मुख्य तक पहुंच नहीं जाते हैं तब तक फेंक दिया जा सकता है() जो एप्लिकेशन को समाप्त कर देगा।

अन्य अपवाद एक संकलित त्रुटि का कारण बनते हैं यदि उन्हें फेंकने वाली सूची में कैच या शामिल नहीं किया जाता है।

4

नोट: एक RuntimeException एक अनियंत्रित अपवाद नहीं है

एक अनियंत्रित अपवाद एक है कि निष्पादन में एक बिंदु पर संभव माना जाता है लेकिन वह पकड़ा नहीं है, उदाहरण के लिए एक NullPointerException हमेशा एक संभावना है हो सकता है अगर आप डॉन उनके लिए जांच न करें और आपके कार्यक्रम को समाप्त कर देगा। आप कोशिश-पकड़ में कोड लपेटकर इसकी जांच कर सकते हैं, लेकिन यह लागू नहीं किया गया है (एक चेक अपवाद के विपरीत जो लागू करेगा कि अपवाद को किसी तरह से संभाला जाता है)।

एक त्रुटि कुछ ऐसा होता है जो निष्पादन के दौरान किसी भी समय हो सकता है और वास्तव में पकड़ा नहीं जा सकता क्योंकि यह किसी विशेष विधि कॉल आदि के कारण स्पष्ट रूप से नहीं होता है। उदाहरण के लिए एक आउटऑफमेमरी एरर या स्टैक ओवरफ्लो एरर। ये दोनों किसी भी समय हो सकते हैं और आपके आवेदन को समाप्त कर देंगे। इन त्रुटियों को पकड़ना कोई समझ नहीं आता क्योंकि वे इंगित करते हैं कि कुछ ऐसा हुआ है जिससे आप ठीक नहीं हो पाएंगे।

+4

नहीं, यह दूसरा रास्ता है। एक रनटाइम अपवाद आईएस-ए अनचेक अपवाद। – BalusC

3

त्रुटियां मौलिक समस्याएं इंगित करती हैं जो कभी नहीं होनी चाहिए। यदि आप एक त्रुटि में भाग लेते हैं। वास्तव में बुरा हुआ।
दूसरी ओर अनचेक अपवाद (रनटाइम अपवाद) का उपयोग तब भी किया जाता है जब किसी अपवाद की अपेक्षा की जा सकती है लेकिन इसके साथ निपटने का कोई उचित तरीका नहीं है और इस प्रकार एक प्रयास पकड़ने का कथन केवल कष्टप्रद और अंतरिक्ष की बर्बादी होगी।

+2

रनटाइम अपवाद अनचेक अपवाद का सबसेट है, समानार्थी नहीं। –

59

के रूप में उनके नाम से कहा गया है, अनियंत्रित अपवाद हैं संकलन समय जिसका अर्थ है कि संकलक तरीकों की आवश्यकता नहीं है पकड़ने के लिए या (एक throws के साथ) निर्दिष्ट करने के लिए उन पर जाँच नहीं की।

The unchecked exceptions classes are the class RuntimeException and its subclasses, and the class Error and its subclasses. All other exception classes are checked exception classes. The Java API defines a number of exception classes, both checked and unchecked. Additional exception classes, both checked and unchecked, may be declared by programmers. See §11.5 for a description of the exception class hierarchy and some of the exception classes defined by the Java API and Java virtual machine.

निम्न चित्र अपवाद पदानुक्रम दिखाता है::

alt text

वर्ग Error और उसके उपवर्गों जो साधारण से अपवाद हैं इस वर्ग से संबंधित वर्गों JLS की धारा 11.2 Compile-Time Checking of Exceptions में विस्तृत कर रहे हैं कार्यक्रमों को आम तौर पर पुनर्प्राप्त करने की अपेक्षा नहीं की जाती है और जैसा कि 11.5 The Exception Hierarchy में बताया गया है:

The class Error is a separate subclass of Throwable , distinct from Exception in the class hierarchy, to allow programs to use the idiom:

} catch (Exception e) { 

to catch all exceptions from which recovery may be possible without catching errors from which recovery is typically not possible.

सारांशित करने के लिए, अनचेक अपवाद का एक उप-समूह है जो पुनर्प्राप्ति संभव है (लेकिन अनचेक अपवाद RuntimeException का पर्याय नहीं है जैसा कि कई लोग यहां जवाब दे रहे हैं)।

1

त्रुटियों और रनटाइम अपवाद सामूहिक रूप से अनचेक अपवाद के रूप में जाना जाता है।

रनटाइम अपवाद असाधारण स्थितियां हैं जो एप्लिकेशन के लिए आंतरिक हैं, और यह कि एप्लिकेशन आमतौर पर अनुमान या पुनर्प्राप्ति नहीं कर सकता है। ये आम तौर पर तर्क त्रुटियों, या एपीआई

के अनुचित उपयोग को इंगित करते हैं, आप इस लिंक को देखना चाहते हैं जो तीन प्रकार के अपवादों को समझाता है।

http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

मुझे आशा है कि इस मदद करता है।

+1

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – ivarni

+1

@ivarni मैंने इसे अपडेट किया है उम्मीद है कि मदद करता है :) प्रतिक्रिया के लिए धन्यवाद। –

2

त्रुटि: ये असाधारण स्थिति है कि आवेदन करने के लिए बाहरी हैं, और आवेदन आमतौर पर आशा नहीं कर सकते हैं कि या से उबरने।

रनटाइम अपवाद: ये असाधारण स्थिति है कि आवेदन करने के लिए आंतरिक हैं, और आवेदन आमतौर पर आशा नहीं कर सकते हैं कि या से उबरने।

आप this पढ़ सकते हैं:

1

चेक किए गए अपवाद:

  • कक्षाएं कि RuntimeException और Error छोड़कर Throwable वर्ग का विस्तार जांचे हुए अपवादों के रूप में जाना जाता है।
  • संकलन समय अपवाद के रूप में भी जाना जाता है क्योंकि संकलन समय पर इन प्रकार के अपवादों की जांच की जाती है। इसका मतलब है कि अगर हम इन अपवादों को अनदेखा करते हैं (try/catch या throw अपवाद के साथ संभाला नहीं गया है) तो एक संकलन त्रुटि हुई।
  • वे प्रोग्राम के रूप में वसूली योग्य समस्याओं जो अप्रत्याशित परिस्थितियों से (आदि नीचे जैसे डेटाबेस, फ़ाइल I/O त्रुटि, गलत इनपुट,) कोड के बाहर नियंत्रण
  • हम उन्हें try/catch ब्लॉक का उपयोग से बच सकते हैं की वजह से कर रहे हैं।
  • उदाहरण:IOException, SQLException आदि

अनियंत्रित अपवाद:

  • कक्षाएं कि विस्तार RuntimeException अनियंत्रित अपवाद
  • अनियंत्रित अपवाद संकलन समय पर जाँच नहीं कर रहे हैं के रूप में जाना जाता है बल्कि वे रनटाइम पर चेक किए जाते हैं। और यही कारण है कि उन्हें "रनटाइम अपवाद" भी कहा जाता है
  • वे प्रोग्रामेटिक रूप से पुनर्प्राप्त करने योग्य समस्याएं हैं लेकिन के विपरीत अपवाद वे कोड प्रवाह या कॉन्फ़िगरेशन में दोषों के कारण होते हैं।
  • उदाहरण:ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException आदि
  • क्योंकि वे त्रुटि प्रोग्रामिंग रहे हैं, वे अच्छी तरह से/बुद्धिमानी से कोडिंग से बचा जा सकता। उदाहरण के लिए "शून्य से विभाजित" ArithmeticEceeption होता है। यदि स्थिति - if(divisor!=0) स्थिति से हम उन्हें सरल से बच सकते हैं। इसी तरह हम केवल संदर्भ की जाँच करके NullPointerException से बच सकते हैं - if(object!=null) या यहाँ तक कि का उपयोग कर better techniques

त्रुटि:

  • Error अप्रतिलभ्य स्थिति है कि ट्राई/कैच
  • उदाहरण द्वारा नियंत्रित नहीं किया जा रहा है संदर्भित करता है :OutOfMemoryError, VirtualMachineError, AssertionError आदि
संबंधित मुद्दे