2010-09-17 14 views
8

मुझे यह पूछने में थोड़ा शर्म आती है कि, जावा प्रोग्रामर होने के लिए वर्षों से, लेकिन यहां जाता है:
क्या निर्माण के दौरान वस्तुओं को आवंटित करने और प्रासंगिक क्षेत्र घोषित करते समय सीधे ऐसा करने में कोई अंतर है?जावा क्लास सदस्य प्रारंभिकरण

public class MyClass{ 
    MyObj obj=new MyObj(); 
} 

और

public class MyClass{ 
    MyObj obj; 
    public MyClass() { 
     obj=new MyObj(); 
    } 
} 
बेशक

, मैं इस विशिष्ट init के बाहर मानकों पर भरोसा नहीं करते मान: जो है, वहाँ निम्नलिखित दोनों के बीच एक अंतर है।

+2

नहीं है कुछ भी नहीं है पर शर्म आनी करने के लिए:

एक वैकल्पिक एक प्रारंभकर्ता ब्लॉक

{ var = 1; } 

संदर्भ का उपयोग किया जा सके। हर कोई यहाँ सीखता है !! – bdhar

उत्तर

3

उदाहरण चर प्रारंभ किया से पहले निर्माता कॉल

इसके करने के लिए अच्छा नहीं।
आप उपयोगकर्ता को कॉन्स्ट के कॉल से प्रतिबंधित कर सकते हैं। यदि आप प्रारंभ से पहले कुछ ऑपरेशन करना चाहते हैं।

बेस्ट प्रैक्टिस:

  1. (, अशक्त, झूठी 0, 0.0 ...) घोषणा में मूलभूत मूल्यों के साथ प्रारंभ न करें।
  2. यदि आपके पास कोई कंस्ट्रक्टर पैरामीटर नहीं है जो फ़ील्ड के मान को बदलता है तो घोषणा में प्रारंभिकता को प्राथमिकता दें।
  3. यदि किसी कन्स्ट्रक्टर पैरामीटर के कारण फ़ील्ड का मान बदलता है तो> रचनाकारों में प्रारंभिकता डालें।
  4. अपने अभ्यास में सुसंगत रहें। (सबसे महत्वपूर्ण नियम)

से here

+0

स्थिर चर/विधि कॉल के साथ भी यदि आप कन्स्ट्रक्टर तक वैरिएबल प्रारंभ नहीं करते हैं तो आप एक NullPointerException उत्पन्न कर सकते हैं। – Sean

+1

मैं विवाद करूंगा कि * उन नियमों में से कोई भी "सर्वोत्तम अभ्यास" है। उनमें से कोई भी कोड पठनीयता को महत्वपूर्ण रूप से प्रभावित नहीं करता है, और यह एकमात्र चीज है जो वास्तव में यहां मायने रखती है। –

+0

कोड पठनीयता केवल चिंता का विषय नहीं है, मुझे लगता है कि यह मेरे लिए सबसे अच्छा है। और किसी भी जावा प्रोग्रामर का पालन करने के लिए कॉन्स के लिए जाना होगा। कोड पढ़ने के लिए पहले। –

2

नहीं, नहीं है। सिवाय इसके कि यदि आप एकाधिक कन्स्ट्रक्टर जोड़ते हैं तो आपके पास डुप्लिकेट कोड होगा। Initializing Fields

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