अभी भी नीचे स्क्रॉल कर रहे हैं? हेयर यू गो!
इस सवाल ने मुझे कुछ समय पहले कठिन समय दिया।
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
उपरोक्त परिदृश्य में क्या छपा होगा? हाँ सही अनुमान लगाया:
ex.Message - यह जो कुछ भी है (शायद शून्य से विभाजन का प्रयास किया गया है)
अंत में ब्लॉक करें
आखिरकार
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
यह क्या छपेगा? कुछ भी तो नहीं! यह एक त्रुटि फेंकता है क्योंकि पकड़ ब्लॉक ने एक त्रुटि उठाई।
एक अच्छी प्रोग्रामिंग संरचना में, आपके अपवादों को अंतिम रूप दिया जाएगा, इस अर्थ में कि यह कोड दूसरी परत से संभाला जाएगा। इस तरह के एक मामले को उत्तेजित करने के लिए मैं नेस्टेड हूँ इस कोड की कोशिश करो।
try
{
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block")
}
console.writeline("After finally");
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
इस मामले में आउटपुट होगा:
- अंत में ब्लॉक करें
- ex.Message - जो भी है।
यह स्पष्ट है कि जब आप एक अपवाद को पकड़ते हैं और इसे फिर से अन्य परतों (फ़नलिंग) में फेंक देते हैं, तो फेंकने के बाद का कोड निष्पादित नहीं होता है। यह ठीक उसी तरह काम करता है जैसे किसी फंक्शन के अंदर वापसी कैसे काम करती है।
अब आप जानते हैं कि कैच ब्लॉक के बाद कोड पर अपने संसाधनों को बंद क्यों नहीं करना चाहिए। उन्हें अंत में ब्लॉक करें।