] । आइए एक कोड स्निपेट का विश्लेषण करें और इस घटना के लिए अंतर्निहित कारणों में तल्लीन करें। निजी स्ट्रिंग एस; सार्वजनिक स्ट्रिंग फू () { कोशिश { एस = "देव"; वापसी एस; } अंत में { s = "ओवरराइड चर s"; System.out.println ("अंत में ब्लॉक में प्रवेश"); } } सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] xyz) { परीक्षण obj = नया परीक्षण (); System.out.println (obj.foo ()); } }
जब निष्पादित किया जाता है, तो कोड "अंत में ब्लॉक में प्रविष्टि प्रिंट करता है" लेकिन "देव" लौटाता है। ऐसा इसलिए है क्योंकि रिटर्न मान ट्राई ब्लॉक में रिटर्न स्टेटमेंट के निष्पादन से निर्धारित होता है। ट्राय ब्लॉक पूरा होने के बाद अंत में ब्लॉक में 'एस' में किया गया परिवर्तन होता है और इसलिए रिटर्न वैल्यू में परिलक्षित नहीं होता है।
यह ध्यान रखना महत्वपूर्ण है कि यह 'एस' के मूल्य में परिवर्तन पर लागू होता है स्वयं, वस्तु के संदर्भों में परिवर्तन के लिए नहीं। यदि 's' एक उत्परिवर्तित वस्तु का संदर्भ था और इसकी सामग्री को अंत में ब्लॉक में बदल दिया गया था, तो वे परिवर्तन रिटर्न मान में दिखाई देंगे। जावा भाषा विनिर्देश (JLS) इसके लिए विस्तृत नियमों को रेखांकित करता है धारा 14.20.2 में व्यवहार। ट्राई-फिनली स्टेटमेंट के मामले में, यदि ट्राई ब्लॉक और अंत में ब्लॉक दोनों में रिटर्न स्टेटमेंट हैं, तो अंत में ब्लॉक का रिटर्न वैल्यू प्रबल होता है। ऐसा इसलिए है क्योंकि रिटर्न स्टेटमेंट के निष्पादन को ब्लॉक का अचानक समाप्ति माना जाता है। अंत में ब्लॉक में चर में किए गए परिवर्तन, चाहे मूल्य में या ऑब्जेक्ट संशोधन के माध्यम से, रिटर्न मान को प्रभावित न करें जब तक कि अंत में ब्लॉक में रिटर्न स्टेटमेंट भी शामिल हो।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3