नीचे जावा में सरल उदाहरण पर विचार करें। अगर मैं new B(0)
पर कॉल करके ऑब्जेक्ट बनाता हूं तो क्या होता है? सबसे पहले, मेमोरी में बनाए गए प्रकार बी का ऑब्जेक्ट। फिर, अभिव्यक्ति 1/n एक अपवाद फेंक देगा। लेकिन बनाई गई वस्तु को जावा स्पेक (§12.6.1) के अनुसार कभी भी अंतिम रूप दिया नहीं जाएगा। तो क्या हमें स्मृति रिसाव मिलती है?जावा में, कन्स्ट्रक्टर कॉल के तर्कों का मूल्यांकन करते समय क्या होता है अपवाद फेंकता है?
कृपया ध्यान दें कि मैं नहीं कह रहा हूं कि "एक कन्स्ट्रक्टर अपवाद फेंक सकता है", लेकिन "क्या होता है यदि एक निर्माता किसी विशेष स्थिति में अपवाद फेंकता है।"
एक वस्तु ओ finalizable तक इसके निर्माता ओ पर वस्तु के लिए निर्माता को निरस्त कर दिया और कहा कि मंगलाचरण सफलतापूर्वक पूरा कर लिया है (जो है, एक अपवाद फेंकने के बिना) नहीं है।
class A {
int n;
A(int n) {
this.n = n;
}
}
class B extends A {
B(int n) {
super(1/n);
}
}
मुझे लगता है कि "अंतिम रूप देने योग्य" का मतलब है कि ऑब्जेक्ट जीसीएड होने पर 'अंतिमकरण') कहा जाता है, * नहीं * ऑब्जेक्ट जीसीड प्राप्त होगा या नहीं। –
संभावित डुप्लिकेट [क्या रचनाकार जावा में अपवाद फेंक सकते हैं?] (Http://stackoverflow.com/questions/1371369/can-constructors-throw-exceptions-in-java) – mawalker
@ डेविड एहरमान बिल्कुल। ऑब्जेक्ट को अंतिम रूप देने योग्य है या नहीं, यह काफी हद तक अप्रासंगिक है क्योंकि लगभग कोई परिदृश्य नहीं है जहां आपको अंतिमकर्ताओं का उपयोग करना चाहिए। – biziclop