2009-09-26 13 views
34

क्या होता है यदि दोनों पकड़ें और आखिरकार अपवाद फेंक दें?क्या होता है यदि दोनों पकड़ें और आखिरकार अपवाद फेंक दें?

+0

वहाँ अलग अलग संयोजन कर रहे हैं। आप जिस स्थिति के बारे में सोच रहे हैं उसकी रूपरेखा तैयार करने के लिए आप एक कोड स्निपेट जोड़ना चाहेंगे। –

+0

@ जस्टिन: (सुनिश्चित नहीं है कि आपको इसकी अधिसूचना दी जाएगी ...) मैंने आपके टैग परिवर्तन को वापस ले लिया क्योंकि (1) आपने जावा को हटा दिया है, जो नाटकीय रूप से प्रश्न की सीमा को बदलता है और (2) आपने वीबी जोड़ा है। नेट, जो, कई मामलों में सही होने पर, यहां चीजें नहीं की जाती हैं ... (दूसरे शब्दों में, मैं इसके साथ सहमत हूं, या सी # को भी हटा रहा हूं, क्योंकि .NET वहां है)। –

+0

@MarkHurd समस्या यह है कि एक या अधिक उत्तरों .Net विशिष्ट समाधान से लिंक हैं - मैं जावा में उत्तरों की वैधता के लिए बात नहीं कर सकता। इसके अलावा अन्य वीबी.Net प्रश्नों के इस प्रश्न के लिंक हैं (जैसा कि उत्तर वही है)। – Justin

उत्तर

32

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

+0

ऐसा करने के लिए प्रलोभन किया गया है ताकि यह सुनिश्चित किया जा सके कि मैं अपने ब्लॉक कोड से प्रत्येक अपवाद संदेश को अंदर आज़माएं। मैं व्यक्तिगत रूप से अपवाद –

4

अंतिम अपवाद फेंक दिया गया है।

6

जब पकड़ एक अपवाद फेंकता है, अंततः ब्लॉक चलाया जाएगा और फिर अपवाद के साथ बाहर निकलें। यदि अंत में अवरोध एक अपवाद फेंकता है, तो ब्लॉक अपवाद के साथ बाहर निकल जाएगा।

+0

तो अंत में क्या अपवाद फेंक दिया जाएगा? अंत में ब्लॉक या पकड़ ब्लॉक से? – Arthur

+4

अंतिम फेंक दिया अपवाद। : डी – NawaMan

4

इसके पहले से ही adrianbanks द्वारा अच्छी तरह से जवाब दे दिया गया है, लेकिन निम्नलिखित पोस्ट दिलचस्प होना चाहिए: Interesting Exception Results: Throwing Exceptions From the Finally Block

+0

फेंक देता हूं मैंने ब्लॉग पर एक टिप्पणी जोड़ा है, लेकिन कंसोल एप्लिकेशन परिणाम ऐसा प्रतीत होता है क्योंकि सीएलआर फिल्टर चरण के दौरान (पहले) अनचाहे अपवाद की रिपोर्ट कर रहा है (जब वीबी.नेट की 'कब' धारा संसाधित होती है) , शायद इसलिए कि एक डीबगर कहा जा सकता है और फिर पहले अपवाद की रेखा का पता लगाएं। 'फेंक' से पहले 'आखिरकार' में कुछ प्रिंट करके इसे सबसे अधिक ध्यान दिया जाता है। पहला अपवाद लॉग होता है तो 'अंत में' संसाधित होता है और दूसरा अपवाद लॉग होता है। यह .NET Framework 1.1 के माध्यम से 3.5 के लिए होता है। .NET 4.0 केवल पहले अपवाद की रिपोर्ट करता है। (1.0 और 4.5 उपलब्ध नहीं है।) –

-4

HI Nwaman मैं आप का जवाब गलत है मैं खिड़कियों appliaction में इसका परीक्षण किया है लगता है, मैंने पाया अगर यू की तरह एक प्रोग्राम लिखने नेस्टिंग पैटर्न दोनों एक कैच और एक अंत में ब्लॉक के साथ संभव | नीचे दिए गए एक

try 
{ 
    string s = "hu"; 
    int i = int.Parse(s); 
} 
catch (Exception ex) 
{ 
    string s = "hu"; 
    int i = int.Parse(s); 
    throw new Exception(); 
} 
finally 
{ 
    MessageBox.Show("hi"); 
} 

और इस कारण नहीं बनेगा अंत में excute को,

+2

हम्म, मैंने अभी कोशिश की और आखिर में वास्तव में निष्पादित किया। – agentnega

संबंधित मुद्दे