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

जावा अपवाद हैंडलिंग कोड \"थ्रेड मुख्य MyExc2 में 13Exception\" के बजाय \"थ्रेड मुख्य MyExc1 में 132Exception\" क्यों उत्पन्न करता है?

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

Why does the Java exception handling code produce \

जावा में अपवाद हैंडलिंग: अस्पष्टता को उजागर करना

एक जटिल जावा अपवाद-हैंडलिंग परिदृश्य में, एक विश्वविद्यालय प्रश्न ने निम्नलिखित कोड स्निपेट प्रस्तुत किया:

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

// Main Class
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 में 13 अपवाद" था। हालाँकि, सही उत्तर "थ्रेड मुख्य MyExc1 में 132 अपवाद" है। &&&]

सिद्धांत: जब एक नया अपवाद कैच या अंत में ब्लॉक के भीतर फेंक दिया जाता है, तो संभाला जा रहा वर्तमान अपवाद निरस्त कर दिया जाता है।

    परिणाम :
  • वर्तमान अपवाद का प्रसार रोक दिया गया है।
  • नया अपवाद प्रसार अपवाद बन जाता है।नया अपवाद सामान्य रूप से स्टैक को खोल देता है, किसी भी लागू कैच या अंततः ब्लॉक का सामना करना। ]

    • प्रारंभिक निष्पादन
    • :
    • पंक्ति 13: MyExc1 को q() के प्रयास ब्लॉक में फेंक दिया गया है।
    पंक्ति 18: MyExc1 q() के कैच ब्लॉक में फंस गया है।
लाइन 21: लाइन 21 निष्पादित है (प्रिंट 3)।

कैच ब्लॉक अपवाद:
  1. पंक्ति 19: MyExc2 को मुख्य() के कैच ब्लॉक में फेंक दिया जाता है।

    पंक्ति 22: MyExc2 MyExc1 के प्रसार को रोक देता है।
    • पंक्ति 19: MyExc2 स्टैक को खोलना शुरू करता है।
    मेन के ट्राई ब्लॉक में निष्पादन फिर से शुरू होता है:
  2. पंक्ति 15 : पंक्ति 15 निष्पादित है (प्रिंट 2)।

    पंक्ति 16: MyExc1 को मुख्य() के अंतिम ब्लॉक में फेंक दिया गया है।
    • पंक्ति 16: MyExc1 MyExc2 के प्रसार को रोक देता है।
    • पंक्ति 16: MyExc1 स्टैक को खोलना शुरू कर देता है (और अभी भी मुख्य के अंतिम ब्लॉक के अधीन है)।
  3. अंततः ब्लॉक अपवाद:

    पंक्ति 23: अपवाद को मुख्य() के अंतिम ब्लॉक में फेंक दिया जाता है। स्टैक ऊपर।
    • आउटपुट:
    • अंतिम आउटपुट "थ्रेड मुख्य MyExc1 में 132 अपवाद" है क्योंकि जो अपवाद फैलता है मुख्य विधि MyExc1 को पंक्ति 16 में फेंक दिया जाता है। जब MyExc1 को पंक्ति 16 में फेंक दिया जाता है, तो पंक्ति 19 में फेंका गया MyExc2 निरस्त हो जाता है।
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3