अंततः ब्लॉक हमेशा कोशिश ब्लॉक के समाप्त होने के बाद चलाया जाता है, चाहे कोशिश सामान्य रूप से समाप्त हो या असामान्य रूप से अपवाद, एर, फेंकने योग्य के कारण।
यदि किसी अपवाद को कोड ब्लॉक के भीतर किसी भी कोड द्वारा फेंक दिया जाता है, तो वर्तमान विधि केवल उसी अपवाद को फिर से फेंकता है (या फेंकना जारी रखता है) (अंत में ब्लॉक चलाने के बाद)।
यदि अंत में ब्लॉक अपवाद / त्रुटि / फेंकने योग्य है, और पहले से ही एक फेंकने योग्य है, तो यह बदसूरत हो जाता है। काफी स्पष्ट रूप से, मैं वास्तव में क्या होता है (मेरे प्रमाणीकरण वर्षों के लिए इतना कुछ) भूल जाते हैं। मुझे लगता है कि दोनों थ्रैबल्स एक साथ जुड़े हुए हैं, लेकिन कुछ विशेष वूडू है जो आपको करना है (यानी - "अंतिम रूप से" बारफेड, एर, थ्रो से पहले मूल समस्या को प्राप्त करने के लिए एक विधि कॉल मुझे देखना होगा)।
संयोग से, संसाधन प्रबंधन के लिए प्रयास करना / अंत में एक बहुत ही सामान्य बात है, क्योंकि जावा में कोई विध्वंसक नहीं है।
जैसे -
r = new LeakyThing();
try { useResource( r); }
finally { r.release(); } // close, destroy, etc
"अंत में", एक और टिप: आप अगर है एक पकड़ने में डालने के लिए परेशान है, या तो पकड़ विशिष्ट (उम्मीद) फेंकने योग्य उपवर्गों, या बस पकड़ "फेंकने योग्य", नहीं "अपवाद", एक सामान्य कैच-ऑल त्रुटि जाल के लिए। बहुत सारी समस्याएं, जैसे प्रतिबिंब नासमझ, "अपवाद" के बजाय "त्रुटियां" फेंक देते हैं, और जो किसी भी "कैच ऑल" कोडेड के रूप में सही से फिसल जाएंगे:
catch ( Exception e) ... // doesn't really catch *all*, eh?
इसके बजाय यह करें:
catch ( Throwable t) ...