जब मैं एक ठेकेदार के माध्यम से स्थिर सदस्यों को प्रारंभ कर सकता हूं तो मुझे स्थिर प्रारंभिक ब्लॉक का उपयोग क्यों करना चाहिए?मैं जावा में स्थिर प्रारंभिक ब्लॉक का उपयोग क्यों करूं?
उत्तर
सबसे पहले, आपके पास कभी भी आपकी कक्षा का कोई उदाहरण नहीं हो सकता है। या हो सकता है कि आप स्थिर सदस्यों को से पहले इनलाइलाइज्ड करना चाहें, आपके पास कक्षा का कोई भी उदाहरण है।
दूसरे, कंस्ट्रक्टर्स से स्थिर सदस्यों आरंभ अधिक काम है:
- क्या आप वाकई हर निर्माता यह करता है कि बनाने के लिए की आवश्यकता होगी;
- आपको स्थिर रखने के लिए ध्वज बनाए रखने की आवश्यकता है कि स्थिर सदस्यों को प्रारंभ किया गया है या नहीं;
- आपको दौड़ की स्थिति को रोकने के लिए सिंक्रनाइज़ेशन के बारे में सोचना होगा;
- आपको सिंक्रनाइज़ेशन के प्रदर्शन प्रभावों पर विचार करना पड़ सकता है, खासकर यदि आपके पास कई वर्ग हैं जो आपकी कक्षा के कई उदाहरण बनाते हैं।
अंत में, यह आमतौर पर धारणात्मक करने के लिए (मैं कहता हूँ "आमतौर पर" क्योंकि वहाँ आलसी आरंभीकरण के लिए वैध उपयोग हैं) गलत बात है।
+1 - यद्यपि यदि आप आलसी (या गैर आलसी स्थगित) प्रारंभिकरण को लागू करने जा रहे थे, तो शायद आप एक कन्स्ट्रक्टर में "ऐसा नहीं करेंगे"। –
एक स्थिर सदस्य कक्षा के किसी भी उदाहरण से जुड़ा नहीं है, जबकि कन्स्ट्रक्टर एक उदाहरण बनाता है। आप वर्ग के एक उदाहरण के बिना स्थिर सदस्यों का उपयोग कर सकते हैं, उन्हें अभी भी प्रारंभ करना होगा। इस मामले में एक कन्स्ट्रक्टर नौकरी नहीं कर सकता है।
तो क्यों:
static Set<String> digits = new HashSet<String>();
static {
Collections.add(digits, "unu", "du", "tri", "kvar", "kvin");
digits.add("ses");
digits.add("sep");
digits.add("ok");
}
निम्नलिखित संभव है यदि:
static Set<String> digits = new HashSet<String>() {{
Collections.add(this, "unu", "du", "tri", "kvar", "kvin");
add("ses");
add("sep");
add("ok");
}};
- यह एक नई अज्ञात वर्ग, जार में एक फ़ाइल से परिचित करवाता है इतना इष्टतम नहीं है।
- दूसरा रूप एक geeky play thing है।
नए अज्ञात वर्गों को इष्टतम क्यों नहीं पेश किया जा रहा है? क्या यह कभी भी क्लासलोडिंग बग का नेतृत्व करेगा? या आप बस इतना कह रहे हैं कि आप अपने जार को फुला नहीं चाहते हैं। –
@ डेविड टी। मुझे किसी भी रूप के लिए कोई नापसंद नहीं है, लेकिन दोनों की तुलना में: पहले की संख्या में 'अंकों' की अनावश्यक घटनाएं होती हैं और दूसरा एक उदार वर्ग (छोटे ओवरहेड) बनाता है और गैर-जावा डेवलपर्स के लिए एक भ्रामक वाक्यविन्यास है। वास्तविक खतरे तब होगी जब एक गैर-स्थिर '{{...}} 'को एक सीरियलज़ेबल क्लास पर उपयोग किया जाता है: फिर आसपास के वर्ग के' इस 'को भी क्रमबद्ध किया जाता है। उदाहरण के लिए ऑब्जेक्ट को पुनः लोड करने के बाद मुझे इस तरह का 'एक्स। यह' शून्य नहीं हुआ है। –
असल में, मुझे एक अंतर मिला -> ग्रहण पर, यदि आपको अपने बेनामी वर्ग के अंदर कोई दुर्घटना हो, तो ग्रहण भी यह नहीं जानता कि कौन सी परियोजना क्रैश की रेखा को इंगित करे (जैसे, कहें कि आपके पास धागे और रननेबल का समूह है अनाम वर्ग के रूप में) –
- 1. जावा स्थिर कोड ब्लॉक
- 2. जब मैं जावा में मल्टीथ्रेड का उपयोग क्यों करूं?
- 3. मैं CAAnimationGroup का उपयोग क्यों करूं?
- 4. ऑब्जेक्ट क्लास में स्थिर ब्लॉक क्यों है?
- 5. जावा: ऑब्जेक्ट का प्रारंभिक अनुक्रम
- 6. जावा वर्गों और स्थिर ब्लॉक
- 7. जावा का इनपुटस्ट्रीम.क्लोज़() ब्लॉक क्यों करता है?
- 8. जावा में स्थिर सहायक विधियों का उपयोग क्यों खराब है?
- 9. कक्षा प्रारंभिक विधि क्यों स्थिर होनी चाहिए?
- 10. जावा - स्थिर प्रारंभिक ब्लॉक में अंतिम चर प्रारंभ किया जा सकता है?
- 11. इस साधारण मामले में स्थिर प्रारंभिक ब्लॉक क्यों नहीं चल रहा है?
- 12. मैं धागे के साथ स्थिर जीवनकाल का उपयोग कैसे करूं?
- 13. जावा: एक स्थैतिक प्रारंभिक ब्लॉक कब उपयोगी होता है?
- 14. मैं जावा में पैकेज-प्राइवेट का उपयोग कब करूं?
- 15. चाइल्ड क्लास का स्थिर ब्लॉक क्यों नहीं है जब Child.name का उपयोग किया जाता है?
- 16. क्या सी ++ में जावा प्रारंभिक ब्लॉक जैसे कोई निर्माण है?
- 17. स्थिर ब्लॉक
- 18. क्या स्थिर प्रारंभिक
- 19. स्टेटिक ब्लॉक जावा में अनप्रचारित
- 20. जावा एनम स्थिरांक प्रारंभिक क्यों नहीं है?
- 21. जावा में मॉकिंग स्टेटिक ब्लॉक
- 22. आप आंतरिक कक्षा में स्थैतिक चर के लिए प्रारंभकर्ता ब्लॉक का उपयोग क्यों नहीं कर सकते?
- 23. मैं जावा में स्विंगवर्कर का उपयोग कैसे करूं?
- 24. मैं जावा में स्थानीय HTTPS यूआरएल का उपयोग कैसे करूं?
- 25. मैं जावा स्कैनर में एक डिलीमीटर का उपयोग कैसे करूं?
- 26. मैं जावा में ब्लेंडर मॉडल का उपयोग कैसे करूं?
- 27. मैं जावा 7 में संग्रह अक्षर का उपयोग कैसे करूं?
- 28. जावा इंस्टेंस प्रारंभिक ब्लॉक में अपवाद फेंकने की अनुमति क्यों नहीं है?
- 29. आरएसपीसी का उपयोग मैं बचाव अपवाद ब्लॉक
- 30. मैं जावा संग्रह सिंगलटन मैप विधि का उपयोग कब करूं?
क्या होगा यदि आप उस वर्ग का एक उदाहरण है - लेकिन इसके स्थिर कार्यों का उपयोग करना चाहते हैं, जो स्थैतिक प्रारंभकर्ता ब्लॉक द्वारा शुरू किए गए मानों का उपयोग करते हैं? – ppeterka
और जब भी c'tor कहा जाता है, स्थिर मान रीसेट हो जाएंगे। खराब!! – Azodious