जावा में वर्ग चर और उदाहरण चर के बीच अंतर क्या हैं? [बन्द है]


16

मैं जावा के लिए बहुत नया हूं और वर्ग चर और उदाहरण चर के बीच के अंतर को समझना चाहता हूं।

उदाहरण के लिए:

class Bicycle { 
    static int cadence = 0; 
    int speed = 0; 
    int gear = 1; 
}

उदाहरण चर और वर्ग चर एक दूसरे से अलग कैसे हैं? यहाँ कौन से चर वर्ग चर हैं, और उदाहरण चर कौन से हैं? यह स्कोप को कैसे प्रभावित करता है?


1
आपको लगता है कि जावा ™ ट्यूटोरियल पढ़ना शुरू कर दिया गया है : कक्षा के सदस्यों को समझना जो इसे समझाते हैं, लेकिन इसे पूरी तरह से समझ नहीं पाए हैं।

जवाबों:


35

वे दोनों सदस्य चर हैं, जिसका अर्थ है कि दोनों एक वर्ग से जुड़े हैं। अब, बेशक, दोनों के बीच मतभेद हैं:

आवृत्ति के चर:

ये चर एक वर्ग के उदाहरण के हैं , इस प्रकार एक वस्तु। और उस वर्ग (वस्तु) के प्रत्येक उदाहरण में उस चर की प्रति है। परिवर्तनशील के लिए किए गए परिवर्तन उस वर्ग के अन्य उदाहरणों में प्रतिबिंबित नहीं होते हैं।

public class Product {
    public int Barcode;
}

कक्षा चर:

इन्हें स्थैतिक सदस्य चर के रूप में भी जाना जाता है और उस चर की केवल एक प्रति होती है जिसे उस वर्ग के सभी उदाहरणों के साथ साझा किया जाता है। यदि परिवर्तन उस चर में किए जाते हैं, तो अन्य सभी उदाहरण परिवर्तनों का प्रभाव देखेंगे।

public class Product {
    public static int Barcode;
}

पूर्ण उदाहरण:

// INSTANCE VARIABLE
public class Main {

    public static void main(String[] args) {

        Product prod1 = new Product();
        prod1.Barcode = 123456;

        Product prod2 = new Product();
        prod2.Barcode = 987654;

        System.out.println(prod1.Barcode);
        System.out.println(prod2.Barcode);
    }
}

public class Product {
    public int Barcode;
}

उत्पादन होगा:

123456

987,654

अब, उदाहरण चर को स्थिर बनाते हुए वर्ग चर में बदलें:

//CLASS VARIABLE
public class Main {

    public static void main(String[] args) {

        Product prod1 = new Product();
        prod1.setBarcode(123456);
        Product prod2 = new Product();
        prod2.setBarcode(987654);

        System.out.println(prod1.getBarcode());
        System.out.println(prod2.getBarcode());
    }
}

public class Product {

    public static int Barcode;

    public int getBarcode() {
        return Barcode;
    }

    public void setBarcode(int value){
        Barcode = value;
    }
}

मैंने गैर-स्थैतिक तरीकों का उपयोग किया और इसे मूल्य से सेट Barcodeकरने में सक्षम किया और इसे ऑब्जेक्ट से कॉल करने में सक्षम होने के लिए और क्लास से नहीं। आउटपुट निम्न होगा:

987,654

987,654


जावा प्रश्न के लिए C # उदाहरण क्यों?
बेसिल स्टारीनेवविच

मेरे विचार बिल्कुल। मैं केवल जावा प्रोग्रामिंग नहीं जानता C #, तो आप बहुत मदद की है
Skylar एडम्स

1
@BasileStarynkevitch मैं मुख्य रूप से C # डेवलपर हूं और चूंकि सिद्धांत दोनों के लिए मायने रखता है और यह उतना ही अच्छा है जितना मैंने जल्दी से एक C # उदाहरण प्रदान किया है, जो मेरे लिए गलत है। :) जावा के लिए मेरे उदाहरण को बदल दिया।
अब्बास

2
@SkylarAdams क्षमा करें, मैंने गलत तरीके से बहुत जल्दी मान लिया कि जो कोई जावा जानता है, वह C # जानता है। मैंने उदाहरण को जावा एक में बदल दिया, आशा है कि यह मदद करता है।
अब्बास

9
इस तरह के प्रश्न के लिए, मुझे लगता है कि यह अप्रासंगिक है, चाहे जावा या सी # का उपयोग कर रहा हो,
थॉमस जंक

6

यह समझाया गया है यहाँ (एक उदाहरण के साथ Bicycleवर्ग चर के साथ वर्ग numberOfBicyclesऔर उदाहरण चर cadence, speed, gearऔर id):

कभी-कभी, आप ऐसे चर चाहते हैं जो सभी वस्तुओं के लिए सामान्य हों। यह staticसंशोधक के साथ पूरा किया गया है । जिन फ़ील्ड में staticसंशोधक की घोषणा होती है, उन्हें स्थैतिक फ़ील्ड या क्लास चर कहा जाता है। वे किसी वस्तु के बजाय वर्ग से जुड़े होते हैं। कक्षा का हर उदाहरण एक वर्ग चर साझा करता है, जो स्मृति में एक निश्चित स्थान पर होता है। कोई भी वस्तु एक वर्ग चर का मान बदल सकती है, लेकिन कक्षा का एक उदाहरण बनाए बिना वर्ग चर भी हेरफेर किया जा सकता है।

एक वर्ग चर (घोषित static) सभी उदाहरणों के लिए एक स्थान सामान्य है।

उदाहरण में, numberOfBicyclesएक वर्ग चर है (क्योंकि यह घोषित किया गया है static)। सभी उदाहरणों और कक्षा के लिए केवल एक ही ऐसा चर (यानी स्थान) है। इसलिए यदि आप numberOfBicyclesएक विधि में संशोधन करते हैं , तो अन्य विधियाँ नया मान देखेंगी (विभिन्न Bicycleवस्तुओं के लिए भी )

इसके विपरीत gearऔर idकर रहे हैं उदाहरण चर (क्योंकि उनके घोषणा नहीं है staticसंशोधक)। हर Bicycleवस्तु का अपना एक होता है। आप को संशोधित करते हैं gearकुछ के लिए Bicycle एक , और यदि एक और उदाहरण है, संशोधित करने a.gearपर कोई प्रभाव नहींb.gear

प्रत्येक जावा ऑब्जेक्ट कुछ मेटा डेटा (जैसे अपनी कक्षा के लिए कुछ संदर्भ) और अपने स्वयं के उदाहरण चर (शायद एक सुपरक्लास से विरासत में मिला) के साथ एक अलग मेमोरी ज़ोन है। लेकिन वर्ग चर वर्ग के लिए सामान्य हैं और सभी उदाहरणों द्वारा साझा किए जाते हैं।

ऑब्जेक्ट (कंप्यूटर विज्ञान) और इंस्टेंस चर विकिपीज भी देखें ।


4

उदाहरण चर:

  • इंस्टेंस चर को एक वर्ग में घोषित किया जाता है, लेकिन एक विधि, कंस्ट्रक्टर या किसी ब्लॉक के बाहर।
  • इंस्टेंस वेरिएबल एक वर्ग के उदाहरण से संबंधित है या आप कह सकते हैं कि इंस्टेंस वेरिएबल ऑब्जेक्ट से संबंधित है।
  • इंस्टेंस वेरिएबल में कक्षा के प्रत्येक और हर उदाहरण का अलग-अलग मूल्य होता है।

    Class InstanceDemo {
    
         // this instance variable is visible for any child class.
           public String name = "Testing";
    
         // count variable is visible in Demo class only.
           private int count = 2;
    }

आवृत्ति चर तक पहुँचने की विधि:

InstanceDemo demo = new InstanceDemo ();

System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );

आउटपुट: 2, परीक्षण

वर्ग चर:

  • वर्ग चर वर्ग से संबंधित है।
  • वर्ग चर चर से पहले "स्थिर" कीवर्ड जोड़कर बनाया गया है।
  • जिसे स्टैटिक वेरिएबल भी कहा जाता है।
  • और सबसे महत्वपूर्ण वर्ग चर वर्ग के सभी उदाहरणों के लिए एकल साझा मूल्य बनाए रखता है, भले ही वर्ग का कोई उदाहरण वस्तु मौजूद न हो।

        Class ClassDemo {
    
         // count variable is Same for all instance of this class
           public static int count = 2;
    }

कक्षा चर का उपयोग करने की विधि:

System.out.println("Access Class variable: " + ClassDemo.count );
//class variable is directly refer with class name

आउटपुट: २

वर्ग चर और उदाहरण चर के बीच संक्षिप्त अंतर:

  • उदाहरण चर में प्रत्येक वर्ग के उदाहरण के लिए अलग-अलग मान होते हैं। वर्ग चर वर्ग के सभी उदाहरणों के लिए एकल साझा मूल्य बनाए रखते हैं, भले ही उस वर्ग का कोई उदाहरण वस्तु मौजूद न हो।
  • आप एक स्थिर चर को वर्ग चर में बदलने के लिए स्थैतिक खोजशब्द का उपयोग करेंगे।
  • उदाहरण और वर्ग चर दोनों वर्ग स्तर पर घोषित किए जाते हैं, तरीकों के भीतर नहीं।

3

class variablesऔर instanceचर के बीच का अंतर , केवल एक सवाल है who knows what?

उस ठोस उदाहरण के लिए instance variableकेवल एक ज्ञात (= बाध्य ) है - इसलिए नाम।

  public class Person {
       private String firstName;
       private String lastName;
  [...]
  }

एक वर्ग की परिभाषा ठोस वस्तुओं के निर्माण के लिए एक खाका की तरह है । शायद यह बात आपको थोड़ा भ्रमित कर दे। लेकिन इसे इस तरह से लिखना, प्रत्येक चर अपनी ठोस वस्तु के लिए बाध्य होगा: जैसे कि प्रत्येक व्यक्ति का पहला नाम है

एक class variableदूसरे हाथ पर है - जैसा कि नाम से कहते हैं - प्रत्येक और एक वर्ग के हर सदस्य के लिए जाना जाता है; या तकनीकी रूप से: यह वर्ग स्तर पर ज्ञात / बाध्य है । विशिष्ट उदाहरण कितनी वस्तुओं का एक काउंटर है, आपने बनाया है - हालांकि यह एक बहुत ही समस्याग्रस्त उदाहरण है; लेकिन यह इस प्रारंभिक चरण में कोई फर्क नहीं पड़ता।

  public class Person {
       private String firstName;
       private String lastName;
  [...]
       static int numberOfPersons = 0
  }

numberOfPersonsघोषित किया जाता है staticजो कीवर्ड के बीच distingush है class variablesऔर instance variabes। चर को वर्ग परिभाषा के भीतर अन्य की तरह घोषित किया जाता है। लेकिन staticकीवर्ड संकेत देता है, कि यह अलग है।

  • firstName, lastNameकर रहे हैं उदाहरण चर और कहा कि ठोस उदाहरण के लिए बाध्य

  • numberOfPersons वर्ग के लिए बाध्य है, ताकि हर उदाहरण इस चर का उपयोग कर सके।

tl; डॉ

वह स्थान जहाँ चर को परिभाषित किया जाता है, वर्ग परिभाषा है।

वर्ग चर कक्षा स्तर पर / से बंधे हुए होते हैं, अर्थात प्रत्येक ठोस उदाहरण के पास इसकी पहुँच होती है। एक वर्ग चर को परिभाषित करने के लिए, आप कीवर्ड का उपयोग करते हैं static

इंस्टेंस वेरिएबल्स को केवल एक इंस्टेंस लेवल पर जाना जाता है। आप उन्हें बिना staticकीवर्ड के परिभाषित करते हैं ।

जावा के लिए आगे प्रलेखन यहाँ है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.