2010-03-24 20 views

उत्तर

8

यह कोड रखता है जिसे हमेशा निष्पादित किया जाना चाहिए, चाहे कोई अपवाद होता है या नहीं।

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

अधिक जानकारी के लिए Java tutorials देखें।

3

यह कोई फर्क नहीं पड़ता कि आप catch ब्लॉक में हैं या नहीं, जिसका अर्थ यह है कि वस्तुओं का निपटान करने और अन्य सफाई करने के लिए यह एक महान जगह है।

4

आखिरकार ब्लॉक हमेशा निष्पादित करता है, भले ही अपवाद फेंक दिया गया हो या नहीं। क्लासिक उपयोग उदाहरण मैं सोच सकता हूं कि फाइल बंद हो रही है।

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(); 
    } 
} 
+0

मुझे अभी एहसास हुआ कि यह वास्तव में काम नहीं करेगा क्योंकि stream.close() स्वयं अपवाद फेंकता है! फिर भी एक और कारण है कि मैं जावा अपवादों को नापसंद करता हूं। उदाहरण को अभी भी सामान्य उपयोग पैटर्न दिखाना चाहिए, इसलिए मैं इसे छोड़ दूंगा। – TwentyMiles

+1

कोड व्यवस्थित करने का एक बेहतर तरीका यह है: 'अधिग्रहण(); कोशिश करें {उपयोग(); } अंत में {रिलीज(); } '। –

2

मैं इसे खोलने के लिए संसाधनों की सफाई जब वहाँ कोड का एक खंड में एक से अधिक वापसी बयान कर रहे हैं, एक बहुत क्लीनर कोड बनाने आप एक ही 'पास संसाधन' कोड क्लोन करने की जरूरत नहीं है के रूप में के लिए एक बहुत का उपयोग करें प्रत्येक वापसी बयान से पहले। यह गारंटी है कि कोड अंतिम अनुभाग को कॉल करेगा, भले ही आप कोशिश अनुभाग में वापसी करते हैं। यह इस उदाहरण में कोड सुरक्षा के साथ भी मदद करता है, क्योंकि प्रोग्रामर आसानी से दुर्घटना से बाहर निकल सकता है।

0

आप अपने try या catch ब्लॉक में और साथ ही finally ब्लॉक में कोई मान है, तो ध्यान रखें कि finally ब्लॉक दिया गया मान क्या आप (पिछले निष्पादित ब्लॉक) के साथ खत्म हो जाएगा। इसका मतलब है कि यदि आप try कुछ कोड जो Exception फेंक नहीं देते हैं और उन्हें एक मान वापस करना है, लेकिन आपके finally ब्लॉक को भी मान वापस करना है, finally ब्लॉक का मान वास्तव में वापस किया जाएगा। This SO thread उस बिंदु के बारे में बात करते हैं। मुझे विश्वास नहीं है कि try या catch के अंदर एक मूल्य लौटने पर आमतौर पर आवश्यक या सबसे अच्छा विचार है। यह भी ध्यान रखें कि System.exit(0) जेवीएम को मारता है और इस प्रकार किसी और चीज से पहले निष्पादन रोकता है, जो आपके finally को अप्रत्याशित ब्लॉक प्रदान कर सकता है।

0

आखिरकार ब्लॉक मुख्य रूप से con.close डेटाबेस से कनेक्शन बंद करने के लिए करीबी कथन करने के लिए उपयोग किया जाता है .... कोशिश ब्लॉक हमेशा पकड़ने के ब्लॉक या अंत में (या दोनों भी) द्वारा पीछा किया जाता है ... यदि आप एक बार कोशिश ब्लॉक में प्रवेश करते हैं तो आपका अंतराल ब्लॉक निश्चित रूप से सिस्टम त्रुटि को छोड़कर निष्पादित किया जाएगा, अंत में ब्लॉक में अपवाद .... अंततः ब्लॉक का मुख्य मुख्य बिंदु यह है कि इसे हमेशा निष्पादित किया जाता है, अपवाद को संभाला जाता है या नहीं।

0

आखिर में कीवर्ड का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि आखिरकार ब्लॉक में मौजूद कोड अपवाद घटनाओं के बावजूद सभी परिस्थितियों में निष्पादित होना चाहिए।

उदाहरण के लिए

:

try{ 
    } 
    catch(Exception e){ 
    } 
     finally{ 
      System.out.print("finally executed"); 
      } 

ध्यान दें: ऊपर मामले में अंत में हमेशा निष्पादित करेंगे।

0

हालांकि कई उत्तरों पहले से ही दिए गए हैं कि 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 
} 
संबंधित मुद्दे