मैंने पढ़ा है (कहीं कहीं) finalize()
अभिभावक वर्ग के लिए उप-वर्ग कचरा-संग्रहित होने पर कॉल करने की गारंटी नहीं है, इसका मतलब यह है कि अधिकांश डेवलपर्स उप-वर्ग में finalize()
ओवरराइड करते हैं और super.finalize()
पर कॉल करते हैं?क्या आप subclass के भीतर super.finalize() को कॉल करते हैं?
उत्तर
अंतिमकरण स्वचालित रूप से सुपर क्लास के लिए नहीं बुलाया जाता है। तो अगर आप को अंतिम रूप देने को ओवरराइड, सुपर वर्ग सुनिश्चित करने के लिए उचित तरीके से साफ हो जाता है हो सकता है
protected void finalize() {
try {
// do subclass cleanup
}
finally {
super.finalize();
}
}
इस संदर्भ लेख http://www.ibm.com/developerworks/java/library/j-jtp06294/index.html
यह ध्यान देने योग्य है कि finalizers बहुत उम्मीद के मुताबिक नहीं हैं लायक होना चाहिए देखें और आप डॉन ' अगर वे दौड़ते हैं तो उनका कोई नियंत्रण नहीं होता है। विधियों को अंतिम रूप देने में कुछ भी महत्वपूर्ण नहीं किया जाना चाहिए। सामान्य रूप से यह केवल अपनी कक्षा के स्पष्ट सफाई करने के लिए बेहतर अभ्यास है।
किसी भी गैर जावा संसाधनों को साफ करने के लिए अंतिम रूप देने पर भरोसा करना सर्वोत्तम है (कॉल को अंतिम रूप देने की गारंटी नहीं है)। यदि संभव हो, संसाधनों के साथ प्रयास करें (यदि जेडीके 7 का उपयोग कर रहे हैं) या संभवतः अन्य विकल्पों के साथ संसाधनों को साफ करने के लिए प्रयास करें। यदि आप अंतिम रूप देने के लिए जा रहे हैं, तो आप अंत में ब्लॉक करने के प्रयास में super.finalize डाल सकते हैं। संसाधनों को साफ करने के लिए अंतिम रूप देने पर भरोसा करना बुद्धिमान होगा।
// don't make it public!
protected void finalize() throws Throwable
{
try
{
// custom finalization here
}
finally
{
super.finalize();
}
}
विचार संसाधनों को साफ करने के लिए है, तो यह शायद प्रेत संदर्भ की जाँच करने के लिए बुद्धिमान हो सकता है - एक वस्तु phantomly पहुंचा जा सकता है, तो यह न तो जोरदार/कमजोर/धीरे से पहुंचा जा सकता, को अंतिम रूप दिया जा चुका है & वहाँ पर है कम से कम एक प्रेत संदर्भ (यानी ऑब्जेक्ट को अंतिम रूप दिया गया है लेकिन अभी तक पुनः दावा नहीं किया गया है)।
- 1. जावास्क्रिप्ट - आप उस कक्षा के भीतर से कक्षा के अंदर फ़ंक्शन कैसे कॉल करते हैं?
- 2. क्या आप SELinux को अक्षम करते हैं?
- 3. एसएसआईएस में संग्रहीत प्रक्रिया को आप कैसे कॉल करते हैं?
- 4. क्या UITAPGestureRecognizer को UILabel subclass
- 5. आप जावा से स्कैला ऑब्जेक्ट्स को कैसे कॉल करते हैं?
- 6. क्या आप ToList() करते हैं?
- 7. आप कैसे FB.Canvas.scrollTo को एनिमेट करते हैं?
- 8. आप टर्मिनल के एन्कोडिंग को पाइथन स्क्रिप्ट के भीतर से कैसे प्राप्त करते हैं?
- 9. आप सी कोड से पायथन कोड कैसे कॉल करते हैं?
- 10. क्या आप ईमेल के भीतर शब्द रैपिंग का उपयोग करते हैं?
- 11. आप जावा से स्कैला सिंगलटन विधि कैसे कॉल करते हैं?
- 12. यदि आप जावा में क्लोन नहीं करते हैं तो आप क्या करते हैं और आप इसे क्या कहते हैं?
- 13. INotifyProperty subclass
- 14. आप सी ++ से प्रबंधित (सी #) फ़ंक्शन कैसे कॉल करते हैं?
- 15. आप कक्षा के भीतर विधियों और गुणों को व्यवस्थित कैसे करते हैं?
- 16. आप मॉड्यूल के भीतर सभी मॉड्यूल और कक्षाओं को कैसे प्राप्त करते हैं, पुनरावर्ती?
- 17. जिरा प्लगइन्स: आप क्या उपयोग करते हैं?
- 18. क्या आप फ़िंग का उपयोग करते हैं?
- 19. क्या लॉगपर्सर यूआई आप उपयोग करते हैं?
- 20. क्या आप एनडपेन्स का उपयोग करते हैं?
- 21. आप स्थिर मुख्य() से विधि कैसे कॉल करते हैं?
- 22. क्या आप दावे का उपयोग करते हैं?
- 23. आप "क्या आपका मतलब" लागू करते हैं?
- 24. रेल में, क्या आप link_to को कॉल करते समय फ़्लैश [: त्रुटि] सेट कर सकते हैं?
- 25. जावा एप्लिकेशन के भीतर से आप मॉनिटर को चालू और बंद कैसे करते हैं?
- 26. नेटबीन के भीतर आप स्थानीय फ़ाइल सिंक को कैसे मजबूर करते हैं?
- 27. जटिल निर्माण प्रक्रिया के लिए आप क्या उपयोग करते हैं?
- 28. क्या होता है यदि आप कभी सॉकेट को कॉल नहीं करते हैं। एंडकनेक्ट?
- 29. आप ऑपरेटर को अधिभार कब करते हैं?
- 30. आप कोड को दोबारा कब करते हैं?
प्रभावी जावा - आइटम 7: अंतिमकर्ता से बचें। यदि आप फाइनलाइजर्स का उपयोग करते हैं, तो आपको super.finalize() को कॉल करना चाहिए। – assylias
तो उप-वर्ग कचरा इकट्ठा होने पर सुपर क्लास के लिए अंतिम रूप से कॉल किया जाता है? – user997112
ग्रेट आलेख जो मुझे लगता है प्रासंगिकता है: [क्यों अंतिमकृत संरक्षित है] (http://www.0xcafefeed.com/2005/09/why-is-finalize-method-protected/)। –