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
बयान।