"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > इस जावा अपवाद हैंडलिंग उदाहरण में 'MyExc2' अपवाद क्यों गायब हो जाता है?

इस जावा अपवाद हैंडलिंग उदाहरण में 'MyExc2' अपवाद क्यों गायब हो जाता है?

2024-11-04 को प्रकाशित
ब्राउज़ करें:849

Why Does the `MyExc2` Exception Disappear in This Java Exception Handling Example?

कैच और अंत में क्लॉज में अपवाद हैंडलिंग

जावा में अपवाद हैंडलिंग से निपटते समय, कैच और अंततः क्लॉज के बीच परस्पर क्रिया को समझना महत्वपूर्ण है . विश्वविद्यालय असाइनमेंट के लिए दिए गए निम्नलिखित उदाहरण पर विचार करें:

class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}

public class C1 {
    public static void main(String[] args) throws Exception {
        try {
            System.out.print(1);
            q();
        }
        catch (Exception i) {
            throw new MyExc2();
        }
        finally {
            System.out.print(2);
            throw new MyExc1();
        }
    }

    static void q() throws Exception {
        try {
            throw new MyExc1();
        }
        catch (Exception y) {
        }
        finally {
            System.out.print(3);
            throw new Exception();
        }
    }
}

प्रश्न में इस कोड के आउटपुट के लिए पूछा गया था। जबकि कुछ लोगों ने उत्तर दिया होगा "थ्रेड मुख्य MyExc2 में 13Exception," सही उत्तर है "थ्रेड मुख्य MyExc1 में 132Exception।"

MyExc2 गायब क्यों होता है

समझने की कुंजी सही आउटपुट कैच और अंततः क्लॉज के व्यवहार में निहित है। जब एक अपवाद को कैच या अंततः ब्लॉक के भीतर फेंक दिया जाता है, तो इसका प्रवाह पर महत्वपूर्ण प्रभाव पड़ता है। यहां एक ब्रेकडाउन है:

  • कैच ब्लॉक में अपवाद: यदि कैच ब्लॉक में एक नया अपवाद फेंका गया है (जैसा कि ऊपर थ्रो न्यू MyExc2() के साथ देखा गया है), मूल अपवाद है "निरस्त।" वर्तमान निष्पादन पथ अधूरा छोड़ दिया गया है, और नया अपवाद बाहर की ओर फैलने वाले अपवाद के रूप में कार्य करता है।
  • अंततः ब्लॉक में अपवाद: इसी प्रकार, यदि कोई नया अपवाद डाला जाता है अंततः ब्लॉक, मूल अपवाद भी निरस्त कर दिया गया है। हालाँकि, ध्यान देने योग्य एक महत्वपूर्ण बिंदु है:

    • कैच ब्लॉक का अंतिम ब्लॉक: यदि कैच ब्लॉक के अंतिम ब्लॉक में नया अपवाद डाला जाता है, तो यह अभी भी उस कैच के अधीन होगा अंततः ब्लॉक करें, यदि कोई हो। &&&]
    मुख्य प्रिंट में ट्राई ब्लॉक "1" प्रिंट करता है और q() को कॉल करता है।
q() के अंदर, ट्राई ब्लॉक एक MyExc1 फेंकता है।

कैच ब्लॉक in q() अपवाद को चुपचाप संभालता है।

अंत में q() में ब्लॉक "3" प्रिंट करता है और एक अपवाद फेंकता है।

  1. ब्लॉक को मुख्य में पकड़ें:
  2. MyExc2 को इस ब्लॉक में फेंक दिया गया है, मूल MyExc1 को निरस्त कर दिया गया है।
  3. हालांकि, कैच ब्लॉक में एक अंतिम ब्लॉक है जो अभी भी निष्पादित होता है।
  4. अंततः मुख्य में ब्लॉक करें:
    • MyExc1 को इस ब्लॉक में डाला जाता है, MyExc2 को निरस्त करते हुए।
  5. इसलिए, सही आउटपुट "थ्रेड मुख्य MyExc1 में 132 अपवाद" है। MyExc2 अपवाद "भूल गया" है क्योंकि एक नया अपवाद (MyExc1) कैच ब्लॉक के अंतिम ब्लॉक में फेंक दिया गया है जो MyExc2 को संभाल रहा था।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3