कभी-कभी, मैं देखता हूं
try {
} catch(Throwable e) {
}
और कभी - कभी
try {
} catch(Exception e) {
}
अंतर क्या है?
कभी-कभी, मैं देखता हूं
try {
} catch(Throwable e) {
}
और कभी - कभी
try {
} catch(Exception e) {
}
अंतर क्या है?
जवाबों:
Throwable
इसे पकड़कर उन चीजों को शामिल किया जाता है जो उपवर्ग हैं Error
। आपको आम तौर पर ऐसा नहीं करना चाहिए, सिवाय एक धागे के बहुत उच्चतम "पकड़" स्तर पर जहां आप लॉग इन करना चाहते हैं या अन्यथा पूरी तरह से सब कुछ संभाल सकते हैं जो गलत हो सकता है। यह एक फ्रेमवर्क एप्लिकेशन में अधिक विशिष्ट होगा (उदाहरण के लिए एक एप्लिकेशन सर्वर या एक टेस्टिंग फ्रेमवर्क) जहां यह अज्ञात कोड चल सकता है और उस कोड से गलत होने वाली किसी भी चीज से प्रभावित नहीं होना चाहिए , जितना संभव हो।
throw new Throwable();
, इसलिए यह सबकुछ को पकड़ने का एकमात्र तरीका है।
पहले वाला सभी उपवर्गों Throwable
(इसमें शामिल है Exception
और Error
) को पकड़ता है, दूसरा वाला सभी उपवर्गों को पकड़ता है Exception
।
Error
प्रोग्रामेटिक रूप से किसी भी तरह से अपरिवर्तनीय है और आमतौर पर लॉगिंग उद्देश्यों (जो इसे फिर से गुजरता है) को छोड़कर पकड़ा नहीं जा सकता है। Exception
प्रोग्राम रिकवर करने योग्य है। इसका उपवर्ग RuntimeException
एक प्रोग्रामिंग त्रुटि को इंगित करता है और आमतौर पर पकड़ा नहीं जा सकता है।
Error
और 2 प्राप्त करने के बावजूद होगी ) जब तक लॉगिंग नहीं होती है, तो आपको कभी भी यह सूचना नहीं मिल सकती है कि एक ओओएम हुआ है, आपको आश्चर्य होता है कि सर्वर ने "अजीब" व्यवहार क्यों करना शुरू कर दिया
programmatically unrecoverable
वास्तव में क्या मतलब है? क्या यह इतना गंभीर है, कि हम मूल रूप से JVM से अप्रत्याशित व्यवहार प्राप्त करने का मौका दिए बिना इसे (लॉगिंग, आदि) को पकड़ने के बाद मूल रूप से किसी जावा विधि को कॉल नहीं कर सकते हैं?
Its subclass RuntimeException indicates a programming error
: निश्चित नहीं अगर मैं इस कथन से सहमत हूं। यदि यह सच है, तो इसका मतलब है कि सभी अपेक्षित अपवादों को अपवादों की जाँच करनी चाहिए। क्या होगा अगर मुझे उम्मीद है कि कुछ विफल हो सकता है और मेरे आवेदन से अप्राप्य है, लेकिन मैं कम से कम एक सार्थक अपवाद फेंकना चाहता हूं? उस स्थिति में चेक किए गए अपवाद का उपयोग करना बेकार लगता है और बॉयलरप्लेट कोड बनाता है।
Thowable
वास्तव में सब कुछ भी पकड़ता है यहां तक कि थ्रेडडॉट जो डिफ़ॉल्ट रूप से फेंका जाता है अब थ्रेडेड Thread.stop()
विधि से एक थ्रेड को रोकने के लिए । इसलिए पकड़ने से Throwable
आप यह सुनिश्चित कर सकते हैं कि आप कम से कम अपने कैच ब्लॉक से गुजरे बिना कभी भी कोशिश करने वाले ब्लॉक को नहीं छोड़ेंगे, लेकिन आपको भी संभालना चाहिए OutOfMemoryError
और InternalError
या फिर तैयार रहना चाहिए StackOverflowError
।
Throwable
बाहरी सर्वर लूप के लिए कैचिंग सबसे उपयोगी है जो बाहरी कोड के लिए सभी प्रकार के अनुरोधों को सौंपता है, लेकिन सेवा को जीवित रखने के लिए कभी भी समाप्त नहीं कर सकता है।
Throwable
के Exception
रूप में अच्छी तरह से सुपर वर्ग है Error
। सामान्य मामलों में हमें हमेशा उप-वर्गों को पकड़ना चाहिए Exception
, ताकि मूल कारण खो न जाए।
केवल विशेष मामले जहां आप चीजों को गलत होने की संभावना देखते हैं जो आपके जावा कोड के नियंत्रण में नहीं है, आपको पकड़ना चाहिए Error
या Throwable
।
मुझे याद है कि थ्रोबल को झंडे को पकड़ना कि एक देशी पुस्तकालय लोड नहीं है।