यह एक बहुत ही व्यापक प्रसार enum सिंगलटन कोड है। लेकिन मैं उलझन में हूँ के बाद मैं 'Inside the Java Virtual Machine' के अध्याय 7 पढ़ें - एक प्रकार का जीवनकाल:एंटम के माध्यम से सिंगलटन आलसी शुरू हुआ है? ने कहा कि यह एक आलसी आरंभीकरण है</p> <pre><code>public enum enumClazz{ INSTANCE enumClazz(){ //do something } } </code></pre> <p>और स्थानों की एक गुच्छा:
जावा आभासी मशीन विनिर्देश कार्यान्वयन वर्ग और इंटरफ़ेस लोडिंग के समय में लचीलापन और जोड़ने, लेकिन सख्ती से देता है प्रारंभिक समय के समय को परिभाषित करता है। सभी कार्यान्वयन को अपने पहले सक्रिय उपयोग पर प्रत्येक कक्षा या इंटरफ़ेस को प्रारंभ करना होगा।
शुरू होता है एक वर्ग का एक उपवर्ग के (एक वर्ग के प्रारंभ में अपनी सुपर क्लास की पूर्व प्रारंभ की आवश्यकता है।)
- एक वर्ग का एक नया उदाहरण बन जाता है (एक नई शिक्षा का निष्पादन bytecodes में, वैकल्पिक रूप से, निहित निर्माण, प्रतिबिंब, क्लोनिंग, या अक्रमांकन के माध्यम से।।): निम्नलिखित छह स्थितियों के रूप में सक्रिय उपयोग करता है अर्हता
- एक स्थिर विधि एक वर्ग द्वारा घोषित के आह्वान (bytecodes में, एक invokestatic शिक्षा का निष्पादन)
- उपयोग या एक स्थिर क्षेत्र क्लास अथवा अंतरफलक द्वारा घोषित का काम, स्थिर क्षेत्रों है कि अंतिम कर रहे हैं के अलावा और द्वारा संकलित एक संकलन-समय निरंतर अभिव्यक्ति (बाइटकोड में रों, एक getstatic या putstatic अनुदेश) के निष्पादन
- ऐसे वर्ग कक्षा में तरीकों के रूप में या java.lang.reflect में कक्षाओं में जावा एपीआई में कुछ चिंतनशील तरीकों, के आह्वान पैकेज
- आरंभीकरण जब एक जावा आभासी मशीन
प्रारंभिक वर्ग के रूप में एक वर्ग के पद पर नियुक्ति (मुख्य() < विधि के साथ)
बोल्ड शैली के साथ तीसरा बिंदु स्पष्ट करता है कि यदि क्षेत्र static final
है, तो फ़ील्ड का प्रारंभिक संकलन समय पर हुआ है। इसी प्रकार, INSTANCE
enumClazz
में public static final
के बराबर है और तीसरे बिंदु का अनुपालन करता है।
क्या मेरी समझ गलत है अगर कोई मुझे सही कर सकता है?
वर्ग सिंगलटन {सार्वजनिक स्थिर अंतिम उदाहरण = नया सिंगलटन(); ...} तो, सामान्य वर्ग के तरीके के लिए, यह 'उदाहरण' आलसी शुरू हुआ है? –
हां यह आलसी ढंग से उसी तरह शुरू किया जाएगा। – assylias
सभी साफ़ हो गए। बहुत बहुत धन्यवाद :) –