Static block in Java not executed -
कक्षा परीक्षण {सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग अरग []) {System.out.println ("** मुख्य विधि "); Println (Mno.VAL); // एसओपी (9090); Println (Mno.VAL + 100); // एसओपी (9190); }} वर्ग Mno {अंतिम स्थिर इंटेल वैल = 9 090; स्थिर {System.out.println ("** MNO \ t का स्थिर ब्लॉक:" + VAL); }} मुझे पता है कि वर्ग लोड होने पर एक स्थिर ब्लॉक निष्पादित होता है। लेकिन इस मामले में क्लास Mno के अंदर उदाहरण चर अंतिम है, इस कारण से स्थिर ब्लॉक निष्पादित नहीं है। ऐसा क्यों है? और अगर मैं अंतिम को निकालूँगा, तो क्या यह ठीक काम करेगा? कौन सा स्मृति पहले आवंटित की जाएगी, स्थिर अंतिम चर या स्थिर ब्लॉक? यदि अंतिम पहुँच संशोधक वर्ग के कारण लोड नहीं होता है, तो कैसे चर स्मृति मिल सकता है?
- एक
स्थिर अंतिम int फ़ील्ड एक संकलन समय स्थिर है और इसका मान कठिन है अपने मूल के संदर्भ के बिना गंतव्य वर्ग; - इसलिए आपका मुख्य वर्ग फ़ील्ड युक्त वर्ग को लोड नहीं करता है;
- इसलिए उस क्लास में स्थिर प्रारंभकर्ता निष्पादित नहीं किया गया है।
विशिष्ट विवरण में, संकलित बाइटकोड इस से मेल खाती है:
सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग अरग []) {System.out.println (" ** मुख्य विधि "); System.out.println (9090) System.out.println (91 9)} जैसे ही आप अंतिम को हटा दें, यह अब संकलन-समय नहीं है निरंतर और ऊपर वर्णित विशेष व्यवहार लागू नहीं होता है। Mno वर्ग आपको अपेक्षा के अनुसार लोड किया जाता है और इसके स्थिर आरंभकर्ता निष्पादित होता है।
Comments
Post a Comment