tryके निष्पादन के साथ ब्लॉक कम्प्लिट्स returnबयान और का मूल्य sसमय में returnबयान निष्पादित करता है विधि द्वारा दिए गए मान है। तथ्य यह है कि finallyक्लॉज बाद में s( returnस्टेटमेंट पूरा होने के बाद ) का मान बदलता है (उस बिंदु पर) रिटर्न वैल्यू नहीं बदलता है।
ध्यान दें कि उपरोक्त खंड ब्लॉक sमें स्वयं के मूल्य में परिवर्तन करता finallyहै, न कि उस वस्तु के sसंदर्भ में। यदि sएक उत्परिवर्तनीय वस्तु (जो Stringनहीं है) और ऑब्जेक्ट की सामग्री को finallyब्लॉक में बदल दिया गया था , तो उन परिवर्तनों को लौटे मूल्य में देखा जाएगा।
यह सब कैसे संचालित होता है, इसके विस्तृत नियम जावा भाषा विनिर्देश की धारा 14.20.2 में पाए जा सकते हैं । ध्यान दें कि एक returnस्टेटमेंट का निष्पादन tryब्लॉक के अचानक समापन के रूप में गिना जाता है (" यदि ब्लॉक का निष्पादन किसी अन्य कारण R .... के लिए अचानक पूरा हो जाता है तो " सेक्शन शुरू होता है)। जेएलएस की धारा 14.17 इस बात के लिए देखें कि एक returnबयान एक ब्लॉक की अचानक समाप्ति क्यों है ।
अधिक विस्तार के माध्यम से: अगर दोनों tryब्लॉक और finallyएक के ब्लॉक try-finallyबयान की वजह से अचानक समाप्त returnबयान, तो §14.20.2 से निम्नलिखित नियम लागू होते हैं:
यदि tryब्लॉक का निष्पादन किसी अन्य कारण से अचानक पूरा हो जाता है R [एक अपवाद को फेंकने के अलावा], तो finallyब्लॉक निष्पादित होता है, और फिर एक विकल्प होता है:
- यदि
finallyब्लॉक सामान्य रूप से पूरा होता है, तो tryकथन आर के लिए अचानक पूरा हो जाता है।
- यदि
finallyब्लॉक S के कारण अचानक पूरा हो जाता है, तो tryकथन S (और कारण R को छोड़ दिया जाता है) के कारण अचानक पूरा हो जाता है।
नतीजा यह है कि है returnमें बयान finallyब्लॉक पूरी की वापसी मूल्य निर्धारित करता है try-finallyबयान है, और से दिए गए मान tryब्लॉक खारिज कर दिया है। ऐसा ही एक बात यह है कि एक में होता है try-catch-finallyअगर बयान tryब्लॉक एक अपवाद है, यह एक द्वारा पकड़ा जाता है फेंकता catchब्लॉक, और दोनों catchब्लॉक और finallyब्लॉक returnबयान।