Exception क्लास और Error क्लास दोनों java.lang.Throwable क्लास के सबक्लास हैं। हम रनटाइम पर अपवादों को हैंडल कर सकते हैं लेकिन एरर्स को हैंडल नहीं कर सकते।
- Exceptions (अपवाद): ये रनटाइम पर होने वाली तार्किक त्रुटियों (logical errors) को दर्शाने वाले ऑब्जेक्ट्स हैं जो JVM को "अस्पष्टता" (ambiguity) की स्थिति में डाल देते हैं। JVM द्वारा इन रनटाइम त्रुटियों को दर्शाने के लिए स्वचालित रूप से बनाए गए ऑब्जेक्ट्स को अपवाद (Exception) कहा जाता है।
- Errors (त्रुटियां):
ErrorThrowableक्लास का सबक्लास है जो गंभीर समस्याओं को इंगित करता है जिन्हें एक उचित एप्लिकेशन को पकड़ने (catch) का प्रयास नहीं करना चाहिए। अधिकांश ऐसी त्रुटियां असामान्य स्थितियां (abnormal conditions) होती हैं। - यदि कोई अपवाद होता है, तो हम इसे
tryऔरcatchब्लॉक का उपयोग करके हैंडल कर सकते हैं। यदि कोई त्रुटि होती है, तो हम इसे हैंडल नहीं कर सकते, प्रोग्राम का निष्पादन समाप्त हो जाएगा। - अपवाद में दो प्रकार होते हैं: Checked Exception और Unchecked Exception।
Errorडिफ़ॉल्ट रूप से अनचेक्ड अपवाद (unchecked exception) है। - एक अपवाद
java.lang.Exceptionटाइप का होता है और एक त्रुटिjava.lang.Errorटाइप की होती है।
विस्तृत तुलना
| विशेषता | Exception (अपवाद) | Error (त्रुटि) |
|---|---|---|
| पैरेंट क्लास | java.lang.Exception | java.lang.Error |
| कारण | प्रोग्रामिंग त्रुटियां, अमान्य इनपुट, संसाधन अनुपलब्धता | सिस्टम स्तर की गंभीर समस्याएं (मेमोरी, स्टैक, लिंकेज) |
| हैंडलिंग | try-catch से हैंडल किया जा सकता है और करना चाहिए | हैंडल नहीं करना चाहिए (unrecoverable) |
| प्रकार | Checked और Unchecked दोनों | केवल Unchecked |
| कंपाइलर जांच | Checked exceptions की कंपाइलर जांच करता है | कंपाइलर जांच नहीं करता |
| उदाहरण | IOException, SQLException, NullPointerException | OutOfMemoryError, StackOverflowError, NoClassDefFoundError |
| रिकवरी | संभव (अपवाद हैंडल करके प्रोग्राम जारी रख सकते हैं) | आमतौर पर असंभव (JVM अस्थिर स्थिति में) |
Exception श्रेणी (Hierarchy)
java.lang.Throwable
├── java.lang.Error
│ ├── OutOfMemoryError
│ ├── StackOverflowError
│ ├── NoClassDefFoundError
│ └── ...
└── java.lang.Exception
├── java.lang.RuntimeException (Unchecked)
│ ├── NullPointerException
│ ├── ArrayIndexOutOfBoundsException
│ ├── IllegalArgumentException
│ └── ...
└── Checked Exceptions
├── IOException
├── SQLException
├── ClassNotFoundException
└── ...
कब क्या उपयोग करें?
- Checked Exceptions: उन स्थितियों के लिए जिन्हें कॉलर द्वारा उचित रूप से हैंडल किया जा सकता है (जैसे फाइल नहीं मिली, नेटवर्क त्रुटि)।
- Unchecked Exceptions (RuntimeException): प्रोग्रामिंग बग्स के लिए (जैसे नल पॉइंटर, गलत इंडेक्स, अवैध आर्गुमेंट)।
- Errors: कभी भी catch न करें। ये JVM/सिस्टम स्तर की विफलताएं हैं जिनसे रिकवरी संभव नहीं है।
निष्कर्ष: अपवाद (Exceptions) एप्लिकेशन स्तर की समस्याएं हैं जिन्हें हैंडल किया जा सकता है और करना चाहिए, जबकि त्रुटियां (Errors) सिस्टम स्तर की गंभीर समस्याएं हैं जिन्हें पकड़ने का प्रयास नहीं करना चाहिए।