2012-07-23 19 views
9

के लिए स्थैतिक ब्लॉक बनाम निजी स्थैतिक विधि निजी स्थैतिक विधियों या स्थिर ब्लॉक के साथ एक स्थिर चर प्रारंभ किया जा सकता है। क्या दोनों के बीच कोई सूक्ष्म अंतर है? क्या कोई ऐसी स्थिति है जहां मैं स्थैतिक सदस्यों को शुरू करने के लिए स्थिर विधि का उपयोग नहीं कर सकता? मैंने बाद में और अधिक पठनीय पाया।स्टेटिक सदस्य प्रारंभिक

स्टेटिक ब्लॉक प्रारंभ:

private static int NUM_ITER; 
static { 
    // Operations 
    NUM_ITER = //val from above operations. 
} 

निजी स्थिर विधि प्रारंभ:

private static int NUM_ITER = calculateNumIter(); 

// Some method comment on how we are calculating. 
private static int calculateNumIter() 
{ 
    // Operations. 
    return //value_from_operations. 
} 

मैं के बाद से इसे और अधिक पठनीय है दूसरा एक पसंद करते हैं। क्या कोई ऐसी स्थिति है जो मुझे केवल पहले (स्थिर ब्लॉक) का उपयोग करनी है?

स्थैतिक सदस्यों (अंतिम और साथ ही चर) प्रारंभ करने के लिए सबसे अच्छा कोडिंग सम्मेलन/डिज़ाइन क्या है? यहां तक ​​कि thread से भी मैंने सीखा है कि स्थैतिक ब्लॉक पर निजी स्थैतिक तरीकों का लाभ है।

धन्यवाद,

+0

मैं स्थिर ब्लॉक के लिए कुछ बार स्थैतिक भूल गया हूं, जब से मैं संस्करण 2 का उपयोग करता हूं;)। – Stefan

उत्तर

2

स्थिर ब्लॉक आवश्यक (या कम से कम उपयोगी) हो सकता है अगर दो अलग चर interdependant हैं और स्वतंत्र रूप से आरंभ नहीं किया जा सकता है।

मान लीजिए कि आपको फ़ाइल से दो मान पढ़ने की जरूरत है, उदाहरण के लिए। आप दोनों मूल्यों को एक अतिरिक्त वस्तु में स्टोर कर सकते हैं। लेकिन यदि आप वास्तव में दो स्थिरांक चाहते हैं, तो एक स्थिर ब्लॉक उपयोगी है।

+0

तो, फिर स्थिर विधि स्थिर ब्लॉक को प्रतिस्थापित कर सकती है। – Mohan

+0

यह काम करता है अगर दूसरा पहले से लिया गया है। लेकिन अगर दोनों एक ही मूल्य से व्युत्पन्न होते हैं, तो ऐसा नहीं होता है। मान लीजिए कि आपको फाइल से दो मान पढ़ने की जरूरत है, उदाहरण के लिए। –

+1

हां, लेकिन क्या होगा यदि आपकी पहली स्थैतिक विधि आपके दूसरे स्थिर सदस्य को तर्क के रूप में स्वीकार करती है? – LastStar007

1
  1. static Initializer ब्लॉक (आपका 1 विकल्प) निष्पादित करता है जब JVM वर्ग को लोड करता है, यहां तक ​​कि से पहले किसी भी static चर आरंभ नहीं हो जाता।

  2. यह एक ही स्थान पर सभी स्थिर चर रखने के लिए एक अच्छी जगह है।

  3. आपका दूसरा विकल्प वैकल्पिक रूप से प्रारंभ करने की विधि के पैरामीटर के लिए कई तर्क पारित करके कईstatic चर प्रारंभ करने में इस्तेमाल किया जा सकता।

+0

मेरे उदाहरण में, गणना numIter() को JVM प्रारंभिकरण के दौरान बुलाया जाएगा। यही है ना – Mohan

+0

हां यह ...... –

2

मैं उपयोग करने के लिए जो कुछ भी वाक्य रचना अपने कोड स्वच्छ और पठनीय रहता सुझाव है:

  • एक करने के लिए प्रारंभ मात्रा में अधिकतम दो, कोड की बहुत ही सरल लाइनों, तो स्थिर ब्लॉक के साथ जाना है, तो ;

  • यदि प्रारंभिक जटिल परिचालन है, तो एक अच्छा नाम वाला एक तरीका सबसे अच्छा होगा;

  • संदेह में, विधि वाक्यविन्यास का उपयोग करें और न केवल परिवर्तनीय घोषित करने के लिए विधि नाम का उपयोग करें, लेकिन यह भी कि आप कैसे प्रारंभ कर रहे हैं (यानी प्रारंभ करें ValueWithRandomNumber());

संबंधित मुद्दे