क्या उपरोक्त को एक अपवाद माना गया है? कोई तथ्य यह नहीं है कि आप एक अपवाद को संभाल रहे हैं Checked Exception
अगर यह एक ऐसा नहीं है RuntimeException
।
है RuntimeException
एक unchecked exception
? हाँ
Checked Exceptions
कर रहे हैं subclasses
के java.lang.Exception
Unchecked Exceptions
हैं subclasses
कीjava.lang.RuntimeException
चेक किए गए अपवादों को फेंकने वाले कॉलों को विधि के कॉलर में एक कोशिश {} ब्लॉक या ऊपर के स्तर में संभाला जाना चाहिए। उस स्थिति में वर्तमान विधि को यह घोषित करना चाहिए कि उसने फेंके गए अपवादों को फेंक दिया ताकि कॉल करने वाले अपवाद को संभालने के लिए उचित व्यवस्था कर सकें।
उम्मीद है की यह मदद करेगा।
प्रश्न: क्या मुझे अपवाद का उपयोग करना चाहिए या अपवाद का उपयोग करना चाहिए?
एक: हाँ यह एक बहुत अच्छा सवाल है और महत्वपूर्ण डिजाइन विचार है। कक्षा अपवाद एक बहुत ही सामान्य अपवाद वर्ग है और इसका उपयोग आंतरिक निम्न स्तर के अपवादों को लपेटने के लिए किया जा सकता है। आप बेहतर एक कस्टम अपवाद बना सकते हैं और उसके अंदर लपेट सकते हैं। लेकिन, और एक बड़ा - अंतर्निहित मूल मूल कारण में कभी अस्पष्ट नहीं। पूर्व के लिए, Don't ever
निम्नलिखित करें -
try {
attemptLogin(userCredentials);
} catch (SQLException sqle) {
throw new LoginFailureException("Cannot login!!"); //<-- Eat away original root cause, thus obscuring underlying problem.
}
इसके बजाय निम्नलिखित करें:
try {
attemptLogin(userCredentials);
} catch (SQLException sqle) {
throw new LoginFailureException(sqle); //<-- Wrap original exception to pass on root cause upstairs!.
}
मूल मूल कारण खाने से ठीक होने से परे वास्तविक कारण होता है, उत्पादन समर्थन टीमों के लिए एक बुरा सपना है, जहां उन्हें आवेदन लॉग और त्रुटि संदेश दिए जाते हैं। हालांकि बाद वाला एक बेहतर डिजाइन है, लेकिन कई लोग इसका उपयोग अक्सर नहीं करते हैं क्योंकि डेवलपर्स सिर्फ कॉल करने वाले को अंतर्निहित संदेश देने में विफल होते हैं। तो एक ठोस नोट करें: Always pass on the actual exception
किसी भी एप्लिकेशन विशिष्ट अपवाद में लिपटे हुए हैं या नहीं।
कोशिश-पकड़ने पर RuntimeExceptions
RuntimeException
सामान्य नियम के रूप में s को पकड़ने की कोशिश नहीं की जानी चाहिए। वे आम तौर पर एक प्रोग्रामिंग त्रुटि का संकेत देते हैं और उन्हें अकेला छोड़ दिया जाना चाहिए। इसके बजाय प्रोग्रामर को कुछ कोड लागू करने से पहले त्रुटि की स्थिति की जांच करनी चाहिए, जिसके परिणामस्वरूप हो सकता है RuntimeException
। पूर्व के लिए:
try {
setStatusMessage("Hello Mr. " + userObject.getName() + ", Welcome to my site!);
} catch (NullPointerException npe) {
sendError("Sorry, your userObject was null. Please contact customer care.");
}
यह एक खराब प्रोग्रामिंग प्रैक्टिस है। इसके बजाय एक शून्य-जांच की जानी चाहिए थी -
if (userObject != null) {
setStatusMessage("Hello Mr. " + userObject.getName() + ", Welome to my site!);
} else {
sendError("Sorry, your userObject was null. Please contact customer care.");
}
लेकिन ऐसे समय होते हैं जब इस तरह की त्रुटि जाँच महंगी होती है जैसे कि संख्या स्वरूपण, इस पर विचार करें -
try {
String userAge = (String)request.getParameter("age");
userObject.setAge(Integer.parseInt(strUserAge));
} catch (NumberFormatException npe) {
sendError("Sorry, Age is supposed to be an Integer. Please try again.");
}
यहां प्री-इनवोकेशन एरर चेकिंग प्रयास के लायक नहीं है क्योंकि यह अनिवार्य रूप से पार्सइंट () विधि के अंदर सभी स्ट्रिंग-टू-पूर्णांक रूपांतरण कोड को कॉपी करने का मतलब है - और एक डेवलपर द्वारा कार्यान्वित होने पर त्रुटि प्रवण है। इसलिए बेहतर होगा कि आप सिर्फ कोशिश करें।
इसलिए NullPointerException
और NumberFormatException
दोनों RuntimeExceptions
को पकड़ना NullPointerException
चाहिए , जब तक NumberFormatException
कि त्रुटि प्रवण कोड के संभावित परिचय से बचने के लिए मैं स्पष्ट रूप से पकड़ने की सलाह देता हूं, एक सुंदर अशक्त जांच के साथ बदल देना चाहिए ।
DataSeries
वर्ग है जो डेटा रखता है जो हमेशा समय-आधारित क्रम में रहना चाहिए। एDataPoint
के अंत में एक नया जोड़ने के लिए एक विधि हैDataSeries
। यदि मेरे सारे कोड पूरे प्रोजेक्ट में सही तरीके से काम कर रहे हैं, तोDataPoint
कभी भी उस अंत में नहीं जोड़ा जाना चाहिए , जिसकी पहले से एक तारीख पहले से है। पूरे प्रोजेक्ट में हर मॉड्यूल इस ट्रूइज्म के साथ बनाया गया है। हालांकि, मैं इस स्थिति की जांच करता हूं और ऐसा होने पर अनियंत्रित अपवाद को फेंक देता हूं। क्यों? यदि ऐसा होता है, तो मैं जानना चाहता हूं कि यह कौन कर रहा है और इसे ठीक कर रहा है।