अपवाद हैंडलिंग में finally
ब्लॉक वास्तव में क्या करता है?अंत में अपवाद हैंडलिंग
उत्तर
यह कोड रखता है जिसे हमेशा निष्पादित किया जाना चाहिए, चाहे कोई अपवाद होता है या नहीं।
उदाहरण के लिए, यदि आपने कोई फ़ाइल खोली है, तो आपको इसे finally
ब्लॉक में बंद करना चाहिए ताकि यह सुनिश्चित किया जा सके कि यह हमेशा बंद रहेगा; यदि आपने इसे try
ब्लॉक में बंद कर दिया है, तो पहले के अपवाद से निष्पादन सीधे catch
ब्लॉक पर कूदने और फ़ाइल को बंद करने को छोड़ देगा।
अधिक जानकारी के लिए Java tutorials देखें।
यह कोई फर्क नहीं पड़ता कि आप catch
ब्लॉक में हैं या नहीं, जिसका अर्थ यह है कि वस्तुओं का निपटान करने और अन्य सफाई करने के लिए यह एक महान जगह है।
आखिरकार ब्लॉक हमेशा निष्पादित करता है, भले ही अपवाद फेंक दिया गया हो या नहीं। क्लासिक उपयोग उदाहरण मैं सोच सकता हूं कि फाइल बंद हो रही है।
FileOutputStream stream = null;
try{
// do stuff with the stream here
} catch (IOException ex){
// handle exception
} finally{
// always close the stream
if(stream != null){
stream.close();
}
}
मैं इसे खोलने के लिए संसाधनों की सफाई जब वहाँ कोड का एक खंड में एक से अधिक वापसी बयान कर रहे हैं, एक बहुत क्लीनर कोड बनाने आप एक ही 'पास संसाधन' कोड क्लोन करने की जरूरत नहीं है के रूप में के लिए एक बहुत का उपयोग करें प्रत्येक वापसी बयान से पहले। यह गारंटी है कि कोड अंतिम अनुभाग को कॉल करेगा, भले ही आप कोशिश अनुभाग में वापसी करते हैं। यह इस उदाहरण में कोड सुरक्षा के साथ भी मदद करता है, क्योंकि प्रोग्रामर आसानी से दुर्घटना से बाहर निकल सकता है।
आप अपने try
या catch
ब्लॉक में और साथ ही finally
ब्लॉक में कोई मान है, तो ध्यान रखें कि finally
ब्लॉक दिया गया मान क्या आप (पिछले निष्पादित ब्लॉक) के साथ खत्म हो जाएगा। इसका मतलब है कि यदि आप try
कुछ कोड जो Exception
फेंक नहीं देते हैं और उन्हें एक मान वापस करना है, लेकिन आपके finally
ब्लॉक को भी मान वापस करना है, finally
ब्लॉक का मान वास्तव में वापस किया जाएगा। This SO thread उस बिंदु के बारे में बात करते हैं। मुझे विश्वास नहीं है कि try
या catch
के अंदर एक मूल्य लौटने पर आमतौर पर आवश्यक या सबसे अच्छा विचार है। यह भी ध्यान रखें कि System.exit(0)
जेवीएम को मारता है और इस प्रकार किसी और चीज से पहले निष्पादन रोकता है, जो आपके finally
को अप्रत्याशित ब्लॉक प्रदान कर सकता है।
आखिरकार ब्लॉक मुख्य रूप से con.close डेटाबेस से कनेक्शन बंद करने के लिए करीबी कथन करने के लिए उपयोग किया जाता है .... कोशिश ब्लॉक हमेशा पकड़ने के ब्लॉक या अंत में (या दोनों भी) द्वारा पीछा किया जाता है ... यदि आप एक बार कोशिश ब्लॉक में प्रवेश करते हैं तो आपका अंतराल ब्लॉक निश्चित रूप से सिस्टम त्रुटि को छोड़कर निष्पादित किया जाएगा, अंत में ब्लॉक में अपवाद .... अंततः ब्लॉक का मुख्य मुख्य बिंदु यह है कि इसे हमेशा निष्पादित किया जाता है, अपवाद को संभाला जाता है या नहीं।
आखिर में कीवर्ड का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि आखिरकार ब्लॉक में मौजूद कोड अपवाद घटनाओं के बावजूद सभी परिस्थितियों में निष्पादित होना चाहिए।
उदाहरण के लिए:
try{
}
catch(Exception e){
}
finally{
System.out.print("finally executed");
}
ध्यान दें: ऊपर मामले में अंत में हमेशा निष्पादित करेंगे।
हालांकि कई उत्तरों पहले से ही दिए गए हैं कि finally
ब्लॉक को सभी शर्तों में कोड के कुछ टुकड़े निष्पादित करने की आवश्यकता है चाहे अपवाद के कारण कुछ बाधा हो या कुछ खराब कोड, या आप try
से प्रोग्राम नियंत्रण प्रवाह वापस कर दें ब्लॉक, यहां मैं finally
ब्लॉक की आवश्यकता को समझाने के लिए एक उदाहरण जोड़ रहा हूं;
मान लें कि आपके मित्र से you have borrowed a pen मान लें। आप इसका इस्तेमाल करते हैं और फिर वापस आते हैं (मैं आपको एक सज्जन मानता हूं)। अब जो कुछ भी होता है, आपको कलम वापस करना होगा। आप विभिन्न स्थितियों को संभाल सकते हैं और आप finally
ब्लॉक में सबसे अपरिहार्य स्थिति डालते हैं।
//Borrow the pen
try{
//Use the pen
}catch(StolenPen how){
//Buy new pen
}catch(InkFinished how){
//Refill the pen
}catch(SomethingWrong how){
//Buy new pen
}finally{
//Return new pen
}
- 1. थ्रेडपूल में अपवाद हैंडलिंग
- 2. अपवाद हैंडलिंग में विकल्प बनाम अपवाद
- 3. JSF2 अपवाद हैंडलिंग
- 4. पायथन में सस्ते अपवाद हैंडलिंग?
- 5. खोल स्क्रिप्टिंग में अपवाद हैंडलिंग?
- 6. एएसपी.नेट वेबफॉर्म में अपवाद हैंडलिंग
- 7. जर्सी में ग्लोबल अपवाद हैंडलिंग
- 8. लाइब्रेरीज़ में अपवाद हैंडलिंग नीति
- 9. क्रोम एक्सटेंशन में अपवाद हैंडलिंग
- 10. कई अपवाद हैंडलिंग ब्लॉक के साथ डेल्फी अपवाद हैंडलिंग समस्या
- 11. डब्ल्यूसीएफ अपवाद हैंडलिंग रणनीतियां
- 12. एमवीवीएम अपवाद हैंडलिंग
- 13. एएसपी.नेट एमवीसी अपवाद हैंडलिंग
- 14. अपवाद हैंडलिंग प्रथाओं
- 15. मोनोटच ग्लोबल अपवाद हैंडलिंग
- 16. हैंडलिंग NHibernate अपवाद
- 17. अपवाद हैंडलिंग पैटर्न
- 18. मजबूत जावास्क्रिप्ट अपवाद हैंडलिंग
- 19. WinForms ग्लोबल अपवाद हैंडलिंग?
- 20. अपवाद हैंडलिंग और
- 21. एओपी अपवाद हैंडलिंग
- 22. हैंडलिंग कई अपवाद
- 23. जावा अपवाद हैंडलिंग विधि
- 24. ofstream अपवाद हैंडलिंग
- 25. जावास्क्रिप्ट अपवाद हैंडलिंग
- 26. असीमित मल्टीथ्रेडिंग अपवाद हैंडलिंग?
- 27. सी ++ अपवाद हैंडलिंग
- 28. अजगर अपवाद हैंडलिंग
- 29. सी # अपवाद हैंडलिंग तंत्र
- 30. पायथन अपवाद हैंडलिंग
मुझे अभी एहसास हुआ कि यह वास्तव में काम नहीं करेगा क्योंकि stream.close() स्वयं अपवाद फेंकता है! फिर भी एक और कारण है कि मैं जावा अपवादों को नापसंद करता हूं। उदाहरण को अभी भी सामान्य उपयोग पैटर्न दिखाना चाहिए, इसलिए मैं इसे छोड़ दूंगा। – TwentyMiles
कोड व्यवस्थित करने का एक बेहतर तरीका यह है: 'अधिग्रहण(); कोशिश करें {उपयोग(); } अंत में {रिलीज(); } '। –