तुम सही हो।
अनियंत्रित अपवादों का उपयोग सिस्टम को तेजी से विफल होने के लिए किया जाता है जो एक अच्छी बात है। आपको स्पष्ट रूप से बताना चाहिए कि ठीक से काम करने के लिए आपकी विधि क्या है। इस तरह आप केवल एक बार इनपुट को मान्य कर सकते हैं।
उदाहरण के लिए:
/**
* @params operation - The operation to execute.
* @throws IllegalArgumentException if the operation is "exit"
*/
public final void execute( String operation ) {
if( "exit".equals(operation)){
throw new IllegalArgumentException("I told you not to...");
}
this.operation = operation;
.....
}
private void secretCode(){
// we perform the operation.
// at this point the opreation was validated already.
// so we don't worry that operation is "exit"
.....
}
बस एक उदाहरण रखना है। मुद्दा यह है कि यदि सिस्टम तेजी से विफल होता है, तो आपको पता चल जाएगा कि यह कहां और क्यों विफल हुआ। आपको एक स्टैकट्रेस मिलेगा जैसे:
IllegalArgumentException: I told you not to use "exit"
at some.package.AClass.execute(Aclass.java:5)
at otherPackage.Otherlass.delegateTheWork(OtherClass.java:4569)
ar ......
और आपको पता चल जाएगा कि क्या हुआ था। अन्य प्रतिनिधि "डेलिगेटवॉर्क" विधि (लाइन 4569 पर) ने आपकी कक्षा को "बाहर निकलें" मूल्य के साथ बुलाया, तब भी जब इसे नहीं करना चाहिए आदि।
अन्यथा आपको अपने कोड पर सभी मान्यताओं को छिड़कना होगा और यह त्रुटि प्रवण है। इसके अलावा, कभी-कभी यह ट्रैक करना मुश्किल होता है कि क्या गलत हुआ और आप निराशा की डीबगिंग के घंटों की उम्मीद कर सकते हैं
समान बात NullPointerException के साथ होती है। यदि आपके पास कुछ 15 विधियों के साथ 700 लाइनें वर्ग हैं, जो 30 विशेषताओं का उपयोग करता है और उनमें से कोई भी अशक्त नहीं हो सकता है, तो उन सभी तरीकों में से प्रत्येक को वैधता के लिए मान्य करने के बजाय, आप उन सभी विशेषताओं को केवल पढ़ सकते हैं और उन्हें निर्माता में मान्य कर सकते हैं या फैक्टरी विधि।
public static MyClass createInstane( Object data1, Object data2 /* etc */ ){
if( data1 == null ){ throw NullPointerException( "data1 cannot be null"); }
}
// the rest of the methods don't validate data1 anymore.
public void method1(){ // don't worry, nothing is null
....
}
public void method2(){ // don't worry, nothing is null
....
}
public void method3(){ // don't worry, nothing is null
....
}
जाँच किए गए अपवाद तब उपयोगी होते हैं जब प्रोग्रामर (आप या आपके सहकर्मी) ने सबकुछ सही किया, इनपुट को मान्य किया, परीक्षण किए, और सभी कोड सही हैं, लेकिन कोड किसी तीसरे पक्ष के वेबसर्वर से कनेक्ट होता है जो नीचे हो सकता है (या फ़ाइल आप उपयोग कर रहे थे (एक अन्य बाहरी प्रक्रिया आदि द्वारा हटा दिया गया था)। कनेक्शन का प्रयास करने से पहले webservice भी मान्य हो सकती है, लेकिन डेटा ट्रांसफर के दौरान कुछ गलत हो गया।
उस परिदृश्य में ऐसा कुछ भी नहीं है जिसे आप या आपके सहकर्मी मदद के लिए कर सकते हैं। लेकिन फिर भी आपको कुछ करना होगा और एप्लिकेशन को उपयोगकर्ता की आंखों में सिर्फ मरने और गायब होने नहीं देना चाहिए। आप इसके लिए एक जांचे गए अपवाद का उपयोग करते हैं और अपवाद को संभालते हैं, ऐसा होने पर आप क्या कर सकते हैं ?, अधिकांश समय, बस त्रुटि को लॉग इन करने का प्रयास करने के लिए, संभवत: अपना काम (ऐप के काम) को बचाएं और उपयोगकर्ता को एक संदेश प्रस्तुत करें। । (साइट ब्लाबला नीचे है, कृपया बाद में पुनः प्रयास करें आदि)
यदि चेक किए गए अपवाद का उपयोग नहीं किया गया है (सभी विधियों के हस्ताक्षर में "थ्रो एक्ससेप्शन" जोड़कर), तो आपका कोड बहुत नाजुक हो जाएगा, क्योंकि हर कोई उस अपवाद को अनदेखा करेगा (क्योंकि बहुत सामान्य है) और कोड की गुणवत्ता गंभीरता से होगी समझौता किया।
यदि आप अनियंत्रित अपवाद का उपयोग करते हैं तो ऐसा ही कुछ होगा। उस कोड के उपयोगकर्ताओं को पता नहीं है कि अगर कुछ गलत हो सकता है तो बहुत कोशिश करें {...} पकड़ (थ्रोएबल टी) दिखाई देगा।