मैं आपको पहले एक उदाहरण दूंगा (लेकिन अंत में यह जवाब है कि विवाद क्यों है)।
मान लें कि आप एक जावा-आधारित दस्तावेज़ संपादक में दस्तावेज़ का संपादन कर रहे हैं और आपके द्वारा किए जाने के बाद आप फ़ाइल-> इस रूप में सहेजें ... का चयन करते हैं और आपने दस्तावेज़ को ऐसे वॉल्यूम में सहेजने के लिए चुना है जिस पर आपकी अनुमति नहीं है। संपादक एक बदसूरत स्टैकट्रेस के साथ आप पर दुर्घटना नहीं करेगा, यह बस आपको बताएगा कि यह फ़ाइल को सहेज नहीं सकता है और यह आपको संपादन जारी रखने और / या किसी अन्य स्थान पर सहेजने देगा।
इस तरह के एक मामले में यह संभवतः एक अपवादित अपवाद था, जिसे पकड़ा गया और उस पर गंभीर रूप से वसूली करने के लिए कार्रवाई की गई।
दूसरी ओर इन को एक शून्य से शून्य या एक नेल पॉइंटर अपवाद के कारण एक प्रोग्रामिंग त्रुटि के कारण अलग किया जाता है जो केवल कुछ स्थितियों में अपने बदसूरत सिर को चीरता है। कोड में कहीं भी हो सकता है, रैम को दूषित किया जा सकता है, आदि कोई एपीआई डॉक्टर आपको नहीं बताएगा कि "यह विधि शून्य से एक डिवीजन को फेंक देगी यदि रैम दूषित है" ।
चेक किए गए अपवाद डिज़ाइन का हिस्सा होने चाहिए और उस एपीआई के उपयोगकर्ताओं को उन्हें संभालने के लिए तैयार करना चाहिए। अनियंत्रित अपवाद लगभग हर जगह हो सकते हैं और हमारे नियंत्रण से परे हैं।
विवाद अनियोजित अपवादों (RuntimeException से बढ़ाकर) का उपयोग करते हुए विवाद तब पैदा होता है जब उन्हें अपवादों का उपयोग करना चाहिए:
- एक कंपकंपी द्वारा परेशान नहीं किया जाना चाहिए
- उनके हस्ताक्षर सरल बनाने के लिए
- क्योंकि वे मानते हैं कि चेक किए गए अपवाद एक निर्भरता के मुद्दे हैं (यदि आप कार्यान्वयन वर्ग में एक नया चेक अपवाद छोड़ते हैं, तो आपको इंटरफ़ेस के हस्ताक्षर को संशोधित करना चाहिए) और वाइसवेरा।