दिलचस्प पोस्ट
स्लैश का उपयोग करें sed में बदलें एक जीआईटी रिपॉजिटरी में सबम्यूडीयल्स की सूची कैसे पर्यावरण क्रॉन अनुकरण के साथ एक स्क्रिप्ट कार्यान्वित? क्या आईफोन / एंड्रॉइड ब्राउज़र्स सीएसएस / मीडिया हाथ में हैं? क्या सी के किसी भी दो-दो-पूरक पूरक हैं? इकाई फ़्रेमवर्क 4.1 कोड प्रथम में एक क्लास प्रॉपर्टी की उपेक्षा करना ट्विटर बूटस्ट्रैप पॉपओवर के अंदर ओलेब मापदंडों का प्रयोग करके तालिका कैसे अपडेट करें? क्या मैं जावा / ग्रोविए में अपने विंडोज डेस्कटॉप वॉलपेपर को बदल सकता हूँ? Random.choice का एक भारित संस्करण Android सूचीदृश्य विभक्त क्या हम एक अंतरफलक का उद्देश्य बना सकते हैं? सी + + में पोस्ट-सर्किट से अधिक तेजता सच है? यदि हां, तो यह क्यों है? कैसे कॉन को केवल संख्याएं लेना चाहिए OleDbException अनधिकृत था … UPDATE कथन में सिंटैक्स त्रुटि

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

क्या कोई निम्नलिखित प्रोग्राम का उत्पादन समझा सकता है? मैंने सोचा कि कंस्ट्रक्चरर्स को इनिशियलाइज़ वैरिएबल से पहले आरम्भ किया जाता इसलिए मैं आउटपुट "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