1 सवाल: स्थैतिक चर या विधियों को कॉल करना / एक्सेस करना

पर बनाया गया सवाल Sun, Mar 17, 2019 12:00 AM

मैं OCA के लिए अध्ययन कर रहा हूं और यह कोड उस पुस्तक में था जिसका मैं उपयोग कर रहा हूं।

 public class Koala {
       public **static** int count = 0;
       public **static** void main(String[] args) {
          System.out.println(count);
       }
    }

    Koala k = new Koala();
    System.out.println(k.count); //prints 0
    k = null;
    System.out.println(k.count); //prints 0

मैं समझता हूं कि जब एक स्थिर चर एक वस्तु में बदलता है तो यह उन सभी में बदल जाता है। यह अंतिम प्रिंटल प्रिंट "null" क्यों नहीं है?

    
0
1 उत्तर                              1                         
  

मैं समझता हूं कि जब एक स्थिर चर एक वस्तु में बदलता है तो यह उन सभी में बदल जाता है

आप गलत तरीके से समझते हैं। अर्थात, एक वस्तु में "के रूप में एक स्टैटिक वेरिएबल के बारे में सोचना गलत है" पहली जगह में।

स्थैतिक चर वर्ग के उदाहरण का सदस्य नहीं है। कुछ भाषाओं में (जैसे जावा, जो कि आप यहाँ उपयोग करते हुए दिखाई देते हैं), आप एक ही प्रकार के वर्ग वाले चर के माध्यम से स्थैतिक सदस्यों तक पहुँच सकते हैं। लेकिन आप उस मामले में कक्षा के एक उदाहरण तक नहीं पहुँच रहे हैं। आप अभी भी साझा चर का उपयोग कर रहे हैं जो वास्तव में कक्षा के प्रकार का हिस्सा है, न कि उस वर्ग का कोई व्यक्तिगत उदाहरण।

अधिक मुहावरेदार, कोई वास्तव में आपके उदाहरण में Koala.count क्षेत्र तक पहुँचने के लिए 0600350991100101035062 लिखेगा।

जब आप लिखते हैं उदा। आपके कोड में count की तरह कुछ, k.count का मूल्य बिल्कुल भी प्रासंगिक नहीं है। यह भाषा की एक विडंबना है कि संकलक पूरी अभिव्यक्ति की व्याख्या उसी सदस्य को संदर्भित करने के लिए करता है जो अभिव्यक्ति k को संदर्भित करता है। अर्थात। चूँकि Koala.count मेंबर को एक्सेस करने के लिए किसी इंस्टेंस रेफरेंस को डिरेल करने की आवश्यकता नहीं है, इसलिए ऐसा करने के लिए किसी भी वैरिएबल के माध्यम से ऐसा करना कानूनी नहीं माना जाता है, क्योंकि count टाइप हो रहा है, भले ही उस वेरिएबल का करंट वैल्यू Koala है। null, null है। स्थिर सदस्य count पर पहुंचने के लिए किसी भी उदाहरण की आवश्यकता है।

चूंकि चर k के मूल्य को अनदेखा किया जाता है, इसलिए आपको वही परिणाम मिलता है, चाहे वह कक्षा Koala के वास्तविक उदाहरण के लिए दिया गया हो, या बस 0600350991100100135035062 है।

    
0
2019-03-17 00: 28: 23Z
  1. हाँ, मैंने वास्तव में कुछ पढ़ा है जहाँ संकलन के बाद k.cala koala.count में बदल जाता है। तो k अशक्त है, लेकिन गिनती नहीं है ...? मुझे लगता है कि मैं अब समझ गया हूं। केवल एक चीज जो मुझे नहीं मिली, जब आपने कक्षा के "भाग का प्रकार" कहा था।
    2019-03-17 02: 00: 18Z
  2. @ टिमोथी: "वर्ग का प्रकार" null62 है। Koala फ़ील्ड उस प्रकार का सदस्य है, अर्थात् 0600350991100101035062 का सदस्य। गैर-स्थिर सदस्य कुछ वास्तविक अर्थों में, count के सदस्य भी हैं, लेकिन बहुत अधिक व्यावहारिक अर्थ में वे वास्तव में प्रत्येक के एक सदस्य हैं उदाहरण 0600350991100101035062, जबकि स्थिर सदस्य हैं सिर्फ स्वयं Koala का सदस्य। स्टैटिक सदस्य वास्तव में प्रत्येक उदाहरण के सदस्य नहीं हैं, भले ही आप उन्हें Koala-टाइप किए गए चर के माध्यम से संदर्भित कर सकते हैं।
    2019-03-17 02: 28: 35Z
    Koala
स्रोत रखा गया यहाँ