अपवाद सिर्फ इतना होना चाहिए .. अपवाद। अपवादों का उपयोग करते समय सबसे अच्छा अभ्यास उन परिस्थितियों को कवर करने के लिए उनका उपयोग करना है जिसमें कुछ ऐसा होता है जो आप होने की उम्मीद करेंगे। क्लासिक उदाहरण FileNotFoundException है, जो तब फेंक दिया जाता है जब कोई फ़ाइल बस वहाँ नहीं होती है। यदि आप फ़ाइल के अस्तित्व का परीक्षण कर रहे हैं, तो आप File.exists () का उपयोग करते हैं क्योंकि आप बस 10 फुट स्टिक के साथ प्रेषण कर रहे हैं यदि आप कुछ हिट करते हैं।
आप तकनीकी रूप से एक ही परिणाम को प्राप्त करने की कोशिश में इसे पकड़कर और फ़ाइल का उपयोग करके इसे पूरा कर सकते हैं जैसे कि यह अस्तित्व में है, लेकिन ए) अपवाद आमतौर पर महंगे संसाधन-वार हैं और बी) प्रोग्रामर मान रहे हैं कि फाइल का मतलब है कि यह मौजूद था। एक कोशिश में पकड़, जो एक कार्यक्रम के समग्र भ्रम में जोड़ता है।
ऐसी कई स्थितियाँ हैं जिनमें मैं एक विधि लिखूंगा जो डेटाबेस से कुछ मूल्य प्राप्त करती है। एक हजार चीजें गलत हो सकती हैं, और यह देखने के लिए कि मुझे केवल एक छोटे से टुकड़े की जानकारी की आवश्यकता कैसे है, कॉल को पकड़ने की कोशिश करने के लिए असुविधाजनक है जिसमें 5 विभिन्न अपवाद शामिल हैं। इसलिए, मैं अपवाद प्राप्त करूँगा। अगर कुछ गलत होता है, तो मैं डेटाबेस कनेक्शन को बंद करने के लिए जो भी उचित कार्रवाई करता हूं या अंत में क्लॉज और रिटर्न नॉट में क्या होता है। यह न केवल अच्छा अभ्यास है क्योंकि यह आपके कोड को सरल करता है, बल्कि इसलिए भी क्योंकि "नल" एक ही संदेश भेजता है जिसे आप एक अपवाद से प्राप्त कर सकते थे .. कि कुछ योजना के अनुसार नहीं हुआ। लाने की विधि में अपवाद विशेषणों को प्रबंधित करें, लेकिन जब चीजें दान करें तो क्या करें इसका प्रबंधन करें
उदाहरण के लिए:
Integer getUserCount() {
Integer result = null;
try {
// Attempt to open database and retrieve data
} catch (TimeoutException e) {
logger.error("Got a watch?");
} catch (MissingDatabaseException e) {
logger.error("What are you smoking?");
} catch (PermissionsToReadException e) {
logger.error("Did you *really* think you were getting away with that?");
} catch (PressedSendButtonToHardException e) {
logger.error("Seriously.. just back away from the computer... slowly..");
} catch (WTFException e) {
logger.error("You're on your own with this one.. I don't even know what happened..");
} finally {
// Close connections and whatnot
}
return result;
}
void doStuff() {
Integer result = getUserCount();
if(result != null) {
// Went as planned..
}
}