2009-09-04 7 views
10

जावा में एक प्रत्याशित उदाहरण का उपयोग करने के लिए, यहां कोड है:जावा में, एक गणना निरंतर निरंतर के लिए कन्स्ट्रक्टर कब होता है?

enum Commands{ 
    Save("S"); 
    File("F"); 

    private String shortCut; 
    private Commands(String shortCut){ this.shortCut = shortCut; } 
    public String getShortCut(){ return shortCut; } 
} 

मेरे पास निम्न परीक्षण/ड्राइवर कोड है:

public static void main(String args[]){ 
    System.out.println(Commands.Save.getShortCut()); 
} 

सवाल यह है: जावा में, जब एक के लिए निर्माता होता है गणना निरंतर निरंतर? उपर्युक्त उदाहरण में, मैं केवल Save समेकित निरंतर उपयोग कर रहा हूं। क्या इसका मतलब यह है कि कन्स्ट्रक्टर को केवल Save बनाने के लिए बुलाया जाता है? या दोनों Save और File दोनों को एक साथ बनाए रखा जाएगा?

उत्तर

11

रचनाकारों को तब लागू किया जाता है जब enum कक्षा प्रारंभ की जाती है। सदस्य कन्स्ट्रेशन ऑर्डर में, प्रत्येक कन्स्ट्रक्टर को वास्तव में संदर्भित और उपयोग किए जाने के बावजूद, प्रत्येक कन्स्ट्रक्टर का आह्वान किया जाएगा।

+0

क्या इसका मतलब यह है कि जब 'क्लासलोडर' कक्षा लोड करता है, तो एनम के निर्माता का आह्वान किया जाता है? या सेव और फाइल जैसे सदस्य तक पहुंचने से कन्स्ट्रक्टर का आह्वान होगा? यदि कोई तर्क कन्स्ट्रक्टर नहीं है तो क्या होता है? –

+0

@ मुहम्मदबाबर एक वर्ग को शुरू किए बिना लोड किया जा सकता है। तो, नहीं, इसका मतलब है कि जब कक्षा शुरू की जाती है, तो प्रत्येक सदस्य का निर्माण होता है। और, जैसा कि मैंने कहा, इससे कोई फ़र्क नहीं पड़ता कि किसी सदस्य का संदर्भ दिया गया है; कक्षा शुरू होने पर यह निर्माण हो जाता है। आपका दूसरा प्रश्न स्पष्ट नहीं है। यदि सदस्य के लिए कोई तर्क प्रदान नहीं किया गया है, तो वहां कोई नो-एर्ग कन्स्ट्रक्टर परिभाषित नहीं होना चाहिए, या enum संकलित नहीं होगा। क्या यही मतलब है तुम्हारा? – erickson

+0

लेकिन enum में हम कभी भी कुछ नया नहीं करते हैं() यानी कोई स्पष्ट प्रारंभिकरण नहीं है! मेरे मामले में enum में केवल एक वैरिएबल i.e * instance * है और कोई तर्क नहीं वाला एक निजी कन्स्ट्रक्टर है। इस कन्स्ट्रक्टर को कब कहा जाता है? –

3

static() {...} विधि की तरह, रचनाकारों को तब शुरू किया जाता है जब एनम कक्षा पहली बार शुरू होती है। एनम के सभी उदाहरण किसी भी इस्तेमाल किए जाने से पहले बनाए जाते हैं। पहले Save.getShortCut() शुरू हो जाती है

public static void main(String args[]){ 
    System.out.println(Commands.Save.getShortCut()); 
} 

इस नमूने में, दोनों Save और File के लिए ctor पूरा कर लिया है जाएगा।

कोड में घोषित किए गए अनुसार क्रमशः इन्हें बुलाया जाता है।

2

दोनों कक्षा प्रारंभिक समय में बनाए जाएंगे क्योंकि अन्य ने कहा था। मुझे यह इंगित करना है कि यह किसी भी स्थिर प्रारंभकर्ता से पहले किया जाता है ताकि आप स्थिर ब्लॉक में इन enums का उपयोग कर सकें।