यह निर्माता के लिए प्रभावी जावा से है:निष्पादन आदेश
ऑपरेशन स्थिरांक stringToEnum नक्शा में एक स्थिर ब्लॉक कि के बाद चलता है से डाल रहे हैं// Implementing a fromString method on an enum type
private static final Map<String, Operation> stringToEnum
= new HashMap<String, Operation>();
static { // Initialize map from constant name to enum constant
for (Operation op : values())
stringToEnum.put(op.toString(), op);
}
// Returns Operation for string, or null if string is invalid
public static Operation fromString(String symbol) {
return stringToEnum.get(symbol);
}
ध्यान दें कि स्थिरांक बनाया गया है। प्रत्येक स्थिर को अपने स्वयं के कन्स्ट्रक्टर से मानचित्र में रखने की कोशिश कर संकलन त्रुटि का कारण बन जाएगा। यह एक अच्छी बात है, क्योंकि यह कानूनी नहीं होने पर एक NullPointerException का कारण बन जाएगा। Enum कन्स्ट्रक्चर-टाइम निरंतर फ़ील्ड को छोड़कर कंट्रोलर्स को एनम के स्थिर फ़ील्ड, तक पहुंचने की अनुमति नहीं है। यह प्रतिबंध आवश्यक है क्योंकि कन्स्ट्रक्टर चलाने पर इन स्थिर फ़ील्ड को अभी तक प्रारंभ नहीं किया गया है।
मेरा प्रश्न लाइन के बारे में है:
"ध्यान दें कि ऑपरेशन स्थिरांक एक स्थिर ब्लॉक के बाद स्थिरांक नहीं बनाई गई है चलाता है कि से stringToEnum नक्शा में डाल रहे हैं"।
मैंने सोचा कि रचनाकार रन चलाने से पहले स्थैतिक ब्लॉक निष्पादित हो जाता है। वास्तव में कक्षा लोड समय के दौरान निष्पादित किया जाता है।
मुझे यहां क्या याद आ रही है?
देखें http://stackoverflow.com/questions/3028219/are-there-any-guarantees-in-jls-about-order-of-execution-static - प्रारंभिकरण-बी –