क्या इस ऑब्जेक्ट के कन्स्ट्रक्टर को अपवाद है, तो finalize()
का उपयोग करके ऑब्जेक्ट को साफ़ किया गया है या नहीं, इस पर कोई विवरण है।एक कन्स्ट्रक्टर अपवाद फेंकने के बाद अंतिम रूप दिया जा सकता है?
जब इस विधि को बुलाया जाता है तो कुख्यात रूप से बीमार परिभाषित किया जाता है। मैनुअल के मुताबिक:
जावा प्रोग्रामिंग भाषा गारंटी नहीं देती कि कौन सा धागा किसी दिए गए ऑब्जेक्ट के लिए अंतिम विधि का आह्वान करेगा। यह गारंटी है, हालांकि, अंतिम रूप देने वाले थ्रेड को उपयोगकर्ता-दृश्य सिंक्रनाइज़ेशन लॉक को अंतिम रूप देने पर नहीं रखा जाएगा। यदि अंतिम अपवाद विधि द्वारा बेकार अपवाद फेंक दिया गया है, तो अपवाद उस ऑब्जेक्ट को अनदेखा और अंतिम रूप देने के लिए अपवाद है।
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize%28%29
मैं इस तरह से अंतिम रूप देने विधि को गति प्रदान करने में सक्षम नहीं किया गया है। क्या किसी को पता है कि क्या इसे बुलाया जाने वाला नहीं है या अगर यह कुछ मामलों में है तो कन्स्ट्रक्टर ऑब्जेक्ट को शुरू करने में विफल रहा है (एक अपवाद)।
मैं यह पूछता हूं क्योंकि मेरे पास एक वस्तु है जिसे दो बार साफ नहीं किया जाना चाहिए। मैं समझने की कोशिश कर रहा हूं कि अपवाद फेंकने से पहले साफ करना सुरक्षित है या अगर मुझे प्रभावी ढंग से छोड़ने और कुछ भी करने के लिए finalize()
के लिए मार्कर छोड़ना होगा।
+1 मुझे लगता है कि यह कुछ आप के रूप में विभिन्न JVMs अलग ढंग से व्यवहार हो सकता है के लिए जाँच करने की आवश्यकता होगी है। –
'अंतिमकरण' का उपयोग करना बुरा है। –
@ पीटर जेएलएस काफी विशिष्ट है, एक आधार [बेस] ऑब्जेक्ट सफलतापूर्वक पूरा हो जाने के बाद एक वस्तु अंतिम रूप देने योग्य है। –