java - What's the difference between instantiating in the field and instantiating in the constructor? -


ऐसा करने में क्या अंतर है:

  सार्वजनिक वर्ग someClass {SomeObject obj = new SomeObject (); // कोड के बाकी कोड}  

और यह

  सार्वजनिक वर्ग SomeClass {SomeObject obj; सार्वजनिक कुछ क्लास () {obj = new SomeObject (); } // शेष कोड}  

जावा भाषा विशिष्टता के अध्याय के अनुसार :

नव निर्मित ऑब्जेक्ट के संदर्भ से पहले परिणाम के रूप में लौटा दिया गया है, संकेतक निर्माता निम्नलिखित प्रक्रिया का उपयोग करके नए ऑब्जेक्ट को इनिशियलाइज़ करने के लिए संसाधित है:

  1. इस निर्माता अभिविन्यास के लिए नए बनाए गए पैरामीटर चर पर निर्माता के लिए तर्क असाइन करें।
  2. यदि यह कन्स्ट्रक्टर उसी श्रेणी में किसी अन्य कन्स्ट्रक्टर के एक स्पष्ट निर्माता आवाज़ के साथ शुरू होता है (इस का उपयोग करके), तो तर्कों का मूल्यांकन करें और प्रक्रिया है कि कन्स्ट्रक्टर इनवोकेशन इन पांच चरणों का पुन: उपयोग कर रहा है। यदि उस निर्माता का आह्वान अकस्मात पूरा होता है, तो यह प्रक्रिया एक ही कारण के लिए अचानक पूरी होती है; अन्यथा, चरण 5 के साथ जारी रखें।
  3. यह कन्स्ट्रक्टर उसी क्लास के किसी अन्य कन्स्ट्रक्टर के स्पष्ट निर्माता के साथ शुरू नहीं करता है (इस का उपयोग करके)। यदि यह निर्माता ऑब्जेक्ट के अलावा किसी अन्य वर्ग के लिए है, तो यह कन्स्ट्रक्टर एक सुपरक्लास कंस्ट्रक्टर (सुपर का उपयोग करके) के स्पष्ट या अप्रत्यक्ष आवाज़ के साथ शुरू होगा। तर्क और प्रक्रिया का मूल्यांकन करें कि सुपरक्लास्ट निर्माता का आह्वान इन पांच चरणों का पुन: उपयोग कर रहा है। अगर उस निर्माता का आह्वान अकस्मात पूरा होता है, तो यह प्रक्रिया एक ही कारण के लिए अचानक पूरी होती है। अन्यथा, चरण के साथ जारी रखें
  4. इस क्लास के लिए इंस्टेंस इनिलाइज़र और इंस्टेंस वेरिएबल इन्टरलाइज़र्स को निष्पादित करें, उदाहरण के आवृत्तियों के आवृत्तियों को बाएं से दाएं क्रम में इसी आवृत्ति चर में निर्दिष्ट करते हैं, जिसमें वे टेक्स्ट दिखाई देते हैं कक्षा के लिए स्रोत कोड में अगर इनमें से किसी भी प्रारंभिक निष्कर्ष का निष्पादन एक अपवाद में होता है, तो कोई और आरंभिक प्रक्रियाएं संसाधित नहीं की जाती हैं और यह प्रक्रिया उसी अपवाद के साथ अचानक पूरी होती है अन्यथा, चरण 5 के साथ जारी रखें। कुछ प्रारंभिक कार्यान्वयन में, कंपाइलर ने फील्ड को प्रारंभ करने के लिए कोड को गलत तरीके से छोड़ दिया यदि फ़ील्ड प्रारंभकर्ता अभिव्यक्ति एक निरंतर अभिव्यक्ति थी, जिसका मान इसके प्रकार के लिए डिफ़ॉल्ट प्रारंभिक मूल्य के बराबर था।)
  5. इस कन्स्ट्रक्टर के शेष हिस्से को निष्पादित करें। यदि उस निष्पादन को अचानक पूरा किया जाता है, तो यह प्रक्रिया एक ही कारण के लिए अचानक पूरी होती है। अन्यथा, यह प्रक्रिया सामान्य रूप से पूर्ण होती है।

तो अंतर मात्र चरण (चरण 4 या चरण 5.) है, लेकिन इसका परिणाम एक जैसा है।

< / div>

Comments

Popular posts from this blog

asp.net - Javascript/DOM Why is does my form not support submit()? -

sockets - Delphi: TTcpServer, connection reset when reading -

javascript - Classic ASP "ExecuteGlobal" statement acting differently on two servers -