Oracle जावा ट्यूटोरियल में "विवादास्पद" कहे जाने वाले बनाम अनियंत्रित अपवादों की जाँच क्यों की जाती है?


10

मैं जावा में नया हूँ और अपवादों पर इसके प्रलेखन को पढ़ रहा था , और विशेष रूप से अनियंत्रित अपवाद - विवाद पृष्ठ।

निचला रेखा कहता है:

यदि किसी ग्राहक से किसी अपवाद से उबरने की अपेक्षा की जा सकती है, तो उसे एक अपवाद बना दें। यदि कोई क्लाइंट अपवाद से पुनर्प्राप्त करने के लिए कुछ नहीं कर सकता है, तो इसे अनियंत्रित अपवाद बनाएं।

मुझे लेख समझ नहीं आ रहा है। "विवाद" क्या है? क्या आप इसे सरल शब्दों में समझा सकते हैं?




कृपया अद्यतन किए गए प्रश्न को देखें, मुझे नहीं लगता कि यह कोई डुप्लिकेट है :)
ABcDexter

3
"मैंने इसे पढ़ने की कोशिश की," - क्या हुआ?
बेकार

2
इसे इस तरह कहा जाता है क्योंकि उस विषय के आसपास बहुत विवाद है। इस स्टैकऑवरफ्लो प्रश्न को भी देखें: चेक किए गए अपवादों के खिलाफ मामला जिसमें प्रसिद्ध / प्रभावशाली लोगों के कुछ उद्धरणों का उल्लेख है
हल्क

जवाबों:


3

मैं आपको पहले एक उदाहरण दूंगा (लेकिन अंत में यह जवाब है कि विवाद क्यों है)।

मान लें कि आप एक जावा-आधारित दस्तावेज़ संपादक में दस्तावेज़ का संपादन कर रहे हैं और आपके द्वारा किए जाने के बाद आप फ़ाइल-> इस रूप में सहेजें ... का चयन करते हैं और आपने दस्तावेज़ को ऐसे वॉल्यूम में सहेजने के लिए चुना है जिस पर आपकी अनुमति नहीं है। संपादक एक बदसूरत स्टैकट्रेस के साथ आप पर दुर्घटना नहीं करेगा, यह बस आपको बताएगा कि यह फ़ाइल को सहेज नहीं सकता है और यह आपको संपादन जारी रखने और / या किसी अन्य स्थान पर सहेजने देगा।

इस तरह के एक मामले में यह संभवतः एक अपवादित अपवाद था, जिसे पकड़ा गया और उस पर गंभीर रूप से वसूली करने के लिए कार्रवाई की गई।

दूसरी ओर इन को एक शून्य से शून्य या एक नेल पॉइंटर अपवाद के कारण एक प्रोग्रामिंग त्रुटि के कारण अलग किया जाता है जो केवल कुछ स्थितियों में अपने बदसूरत सिर को चीरता है। कोड में कहीं भी हो सकता है, रैम को दूषित किया जा सकता है, आदि कोई एपीआई डॉक्टर आपको नहीं बताएगा कि "यह विधि शून्य से एक डिवीजन को फेंक देगी यदि रैम दूषित है"

चेक किए गए अपवाद डिज़ाइन का हिस्सा होने चाहिए और उस एपीआई के उपयोगकर्ताओं को उन्हें संभालने के लिए तैयार करना चाहिए। अनियंत्रित अपवाद लगभग हर जगह हो सकते हैं और हमारे नियंत्रण से परे हैं।

विवाद अनियोजित अपवादों (RuntimeException से बढ़ाकर) का उपयोग करते हुए विवाद तब पैदा होता है जब उन्हें अपवादों का उपयोग करना चाहिए:

  • एक कंपकंपी द्वारा परेशान नहीं किया जाना चाहिए
  • उनके हस्ताक्षर सरल बनाने के लिए
  • क्योंकि वे मानते हैं कि चेक किए गए अपवाद एक निर्भरता के मुद्दे हैं (यदि आप कार्यान्वयन वर्ग में एक नया चेक अपवाद छोड़ते हैं, तो आपको इंटरफ़ेस के हस्ताक्षर को संशोधित करना चाहिए) और वाइसवेरा।

"आपको इंटरफ़ेस के हस्ताक्षर को संशोधित करना चाहिए" - ठीक है, आपको कंपाइलर द्वारा भी ऐसा करने के लिए मजबूर किया जाता है, और आपको प्रत्येक कॉल साइट पर फेंकने के लिए इसे संभालना या घोषित करना होगा।
हल्क

3
क्या यूआई एप्लिकेशन ठीक से उपयोगकर्ता के अनुकूल तरीके से एक त्रुटि को संभालता है, इस पर आधारित है कि प्रोग्रामर ने कोड को कितनी अच्छी तरह से लिखा है। वे अनियंत्रित अपवादों के साथ ठीक उसी तरह से कोड लिख सकते हैं, जिस तरह कोई और गलत तरीके से जाँच किए गए अपवादों के साथ त्रुटियों को संभाल सकता है। आशय जांचे हुए अपवादों की यह आसान प्रोग्रामर ठीक से त्रुटियों को संभालने के लिए के लिए करना है। विवाद वह नहीं है जो आपने यहां दावा किया है, बल्कि यह है कि वास्तव में वे वास्तव में त्रुटि को आसान बनाने के लक्ष्य को सफलतापूर्वक पूरा करते हैं या नहीं। कई की दृष्टि में, वे नहीं करते हैं; वे इसे कठिन बनाते हैं।
सर्वि

@Servy किस उपयोगकर्ता के अनुकूल तरीके से UI ऐप एक विफल रैम चिप के तथ्य को संभाल सकता है, या कोई सीपीयू चक्र के साथ नहीं छोड़ा जा सकता है क्योंकि एक अन्य सॉफ़्टवेयर में खराबी है?
तुलसी कोर्डोवा

1
@ TulainsCórdova में या तो उन मामलों कार्यक्रम भी नहीं जा रहा है रन , इसलिए कोई किया जा रहा से निपटने अपवाद नहीं है अवधि , तो कैसे आप एक त्रुटि का प्रतिनिधित्व करने के लिए प्रयास अप्रासंगिक है जब आप कभी भी में से किसी को चलाने के लिए सक्षम नहीं हैं अपने कोड जब ऐसा होता है।
सर्वि

1
@ TulainsCórdova जरूरी नहीं कि आपको इसे संभालने के लिए त्रुटि का सामना करना पड़े, लेकिन हां, संकलक आपको यह नहीं बताएगा कि इसे फेंका जा सकता है। विवाद यह है कि संकलक आपको बता रहा है कि अपवाद को फेंका जा सकता है या नहीं, वास्तव में मददगार है। कुछ को लगता है कि यह कुछ है, ऐसा नहीं है। यहां सवाल यह है कि विवाद क्या है , और इसका जवाब है। चेक किए गए अपवादों का मुख्य विवाद क्या है, यह आपका बयान नहीं है।
सर्वि

-4

उस पेज पर कोई विवाद नहीं है। यह ओरेकल लोगों को बताए गए अपवादों का उपयोग करने के लिए कह रहा है।

नकली 'विवाद' जो उन्होंने यहां ईजाद किया है, वह भाषा डिजाइनरों और भाषा उपयोगकर्ताओं के बीच है। डिजाइनरों ने लोगों को उन चीजों को फेंकने और पकड़ने की अनुमति दी जो (उनके दिमाग में) फेंकी या पकड़ी नहीं जानी चाहिए। इसलिए उन्होंने आलसी डेवलपर्स के बारे में शिकायत करते हुए एक वेब पेज बनाया।


4
वहाँ है एक विवाद भले ही उस पृष्ठ इसके बारे में थोड़ा कहते हैं। विवादास्पद सवाल का जवाब क्या है, "क्या जाँच किए गए अपवाद मदद करते हैं या बेहतर सॉफ़्टवेयर के विकास में बाधा डालते हैं?" और, "यदि ऐसा है, तो किन अपवादों की जांच होनी चाहिए, और कौन सा अनियंत्रित होना चाहिए?" अगर आप पर्याप्त डेवलपर्स (और बीयर) एक साथ उन सवालों के जवाब देने के लिए एक कमरे में मिल गए तो आप चर्चा करेंगे कि आप एक जीवंत चर्चा शुरू कर सकते हैं।
सोलोमन स्लो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.