दिलचस्प पोस्ट
MySQL में डुप्लिकेट रिकॉर्ड खोजें सॉकेट.ओ और वेबसाईट्स के बीच अंतर जावा कोड बाइट को हेक्साडेसिमल में कनवर्ट करने के लिए सीडी में लिनक्स पर स्टड-आउट धागा सुरक्षित? पता कैसे करें कि कक्षा में एक विशिष्ट सदस्य चर है? MySQL में नल (प्रदर्शन और संग्रहण) मैं सी # asp.Net में एक डीटीओ को काफी जटिल जेसन रिस्पांस से कैसे बनाऊं? क्या एएसपी.नेट में एक अनुरोध या एक सर्वर के लिए स्थिर वर्ग के उदाहरण हैं? रूबी में हैश कुंजी के रूप में प्रतीक का उपयोग क्यों करें? ब्राउज़र को फाइल डाउनलोड करने के लिए मजबूर कैसे करें? JSONException: java.lang.String प्रकार का मान JSONObject में परिवर्तित नहीं किया जा सकता है कमांड लाइन में कैसे जांचें अगर कोई दी गई फ़ाइल या निर्देशिका लॉक है (किसी भी प्रक्रिया द्वारा उपयोग किया जाता है)? क्या मुझे हमेशा 'अपवाद' स्टेटमेंट में कोई अपवाद प्रकार निर्दिष्ट करना चाहिए? ListView में छवियों के आलसी लोड ब्राउज़र सत्रस्टोरेज टैब के बीच साझा करें?

क्या जावा में कंस्ट्रक्टर कोड चलाने से पहले खेले जाने वाले फ़ील्ड शुरू होते हैं?

क्या कोई निम्नलिखित प्रोग्राम का उत्पादन समझा सकता है? मैंने सोचा कि कंस्ट्रक्चरर्स को इनिशियलाइज़ वैरिएबल से पहले आरम्भ किया जाता इसलिए मैं आउटपुट "XZYY" होने की उम्मीद कर रहा था

class X { Y b = new Y(); X() { System.out.print("X"); } } class Y { Y() { System.out.print("Y"); } } public class Z extends X { Y y = new Y(); Z() { System.out.print("Z"); } public static void main(String[] args) { new Z(); } } 

वेब के समाधान से एकत्रित समाधान "क्या जावा में कंस्ट्रक्टर कोड चलाने से पहले खेले जाने वाले फ़ील्ड शुरू होते हैं?"

प्रारंभिक आदेश का सही क्रम है:

  1. स्थैतिक चर initialisers और स्थिर initialisation ब्लॉक, शाब्दिक क्रम में, अगर कक्षा पहले से शुरू नहीं किया गया है।
  2. कन्स्ट्रक्टर में सुपर () कॉल, चाहे स्पष्ट या अंतर्निहित हो।
  3. अनुक्रम चर initialisers और उदाहरण प्रारंभिक ब्लॉक, शाब्दिक क्रम में
  4. सुपर के बाद शेष निर्माणकर्ता का शरीर

जावा आभासी मशीन विनिर्देश के खंड §2.17.5-6 देखें।

यदि आप क्लास फ़ाइल के असंबद्ध संस्करण को देखते हैं

 class X { Y b; X() { b = new Y(); System.out.print("X"); } } class Y { Y() { System.out.print("Y"); } } public class Z extends X { Y y; Z() { y = new Y(); System.out.print("Z"); } public static void main(String args[]) { new Z(); } } 

आप पा सकते हैं कि उदाहरण चर y निर्माता के अंदर ले जाया जाता है, इसलिए निष्पादन अनुक्रम इस प्रकार है

  1. Z के निर्माता को कॉल करें
  2. यह X के डिफ़ॉल्ट कन्स्ट्रक्टर को ट्रिगर करता है
  3. X कंस्ट्रक्टर की पहली पंक्ति को new Y() कहा जाता है
  4. प्रिंट वाई
  5. प्रिंट एक्स
  6. कन्स्ट्रक्टर में पहली पंक्ति को बुलाओ Z new Y()
  7. प्रिंट Y
  8. प्रिंट ज़ेड

सभी उदाहरण चर को कंस्ट्रक्टर स्टेटमेंट्स का उपयोग करके आरंभीकृत किया जाता है।

प्रारंभिककरण का क्रम निम्नानुसार है:

  1. स्टेटिक वैरिएबल और इनिशियलाइजेशन ब्लॉकों, क्रम में वे दिखाई देते हैं
  2. कन्स्ट्रक्टर बॉडी में super() को कॉल करें
  3. अनुक्रम चर और प्रारंभिक ब्लॉक्स, क्रम में वे दिखाई देते हैं
  4. शेष कन्स्ट्रक्टर बॉडी

जावा आभासी मशीन विनिर्देश में खंड § 12.5 से लिया गया।

प्रारंभिक अनुक्रम JLS 12.5 में निर्दिष्ट किया गया है:

1. सबसे पहले, नई ऑब्जेक्ट के लिए स्मृति आवंटित की गई है

2. तब ऑब्जेक्ट में सभी इंस्टेंस व्हेरिएबल (इस क्लास में परिभाषित लोगों सहित और उसके सभी सुपर क्लासेस) उनके डिफ़ॉल्ट मानों के लिए आरंभीकृत हो जाते हैं

3. अंत में, निर्माता कहलाता है।

https://stackoverflow.com/questions/26552799/which-run-first-default-values-for-instance-variables-or-super-constructors