java - जावा में एक निजी स्थैतिक चर का उपयोग क्या है?




variables static (13)

एक वैरिएबल को private static varName; रूप में घोषित कर रहा है private static varName; एक परिवर्तनीय private varName; घोषित करने से कोई अलग private varName; ?

हाँ, दोनों अलग हैं। और पहले को class variable कहा जाता class variable क्योंकि इसमें उस class लिए एकल मान होता है जबकि दूसरे को instance variable कहा जाता instance variable क्योंकि यह विभिन्न instances(Objects) लिए अलग-अलग मान रख सकता है। पहला व्यक्ति जेवीएम में केवल एक बार बनाया जाता है और दूसरा प्रति उदाहरण एक बार बनाया जाता है यानी यदि आपके पास 10 उदाहरण हैं तो आपके पास 10 अलग-अलग private varName; जेवीएम में

वैरिएबल को static रूप में घोषित करने से यह अन्य विशेष गुण देता है?

हां, स्थैतिक चर सामान्य आवृत्ति चर से कुछ अलग गुण प्राप्त करता है। मैंने पहले से ही कुछ का उल्लेख किया है और चलिए कुछ यहां देखें: class variables (इंस्टेंस वेरिएबल्स जिन्हें स्थिर के रूप में घोषित किया जाता है) को ClassName.varName जैसे क्लास नाम का उपयोग करके सीधे एक्सेस किया जा सकता है। और उस वर्ग का कोई भी ऑब्जेक्ट इसके मूल्य को एक्सेस और संशोधित कर सकता है जैसे कि इंस्टेंस चर के केवल अपने संबंधित ऑब्जेक्ट्स तक पहुंचा जा सकता है। कक्षा चर का उपयोग स्थिर तरीकों से किया जा सकता है।

जावा में एक private static variable का उपयोग क्या है?

तार्किक रूप से, private static variable public static variable से अलग नहीं है बल्कि पहला आपको अधिक नियंत्रण देता है। आईएमओ, आप public static चरखी और सेटटर विधियों की सहायता से private static variable द्वारा public static variable को प्रतिस्थापित कर सकते हैं।

private static variable का एक व्यापक रूप से उपयोग किया जाने वाला क्षेत्र सरल Singleton पैटर्न के कार्यान्वयन में है जहां आपके पास पूरी दुनिया में उस वर्ग का केवल एक उदाहरण होगा। यहां static पहचानकर्ता बाहरी भूमिका से सुलभ होने के लिए महत्वपूर्ण भूमिका निभाता है (बेशक सार्वजनिक स्थैतिक गेटर विधि भी मुख्य भूमिका निभाती है)।

public class Singleton {
    private static Singleton singletonInstance = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return Singleton.singletonInstance;
    }
}

यदि एक चर को public static varName; रूप में घोषित किया गया है public static varName; , तो मैं इसे कहीं भी ClassName.varName रूप में एक्सेस कर सकता हूं। मुझे यह भी पता है कि स्थिर सदस्यों को कक्षा के सभी उदाहरणों द्वारा साझा किया जाता है और प्रत्येक उदाहरण में पुन: आवंटित नहीं किया जाता है।

एक वैरिएबल को private static varName; रूप में घोषित कर रहा है private static varName; एक परिवर्तनीय private varName; घोषित करने से कोई अलग private varName; ?

दोनों मामलों में इसे किसी अन्य वर्ग से ClassName.varName या ClassInstance.varName रूप में एक्सेस नहीं किया जा सकता है।

वैरिएबल को स्थिर के रूप में घोषित करने से यह अन्य विशेष गुण देता है?


*) यदि एक चर को निजी के रूप में घोषित किया जाता है तो यह वर्ग के बाहर दिखाई नहीं देता है। इसे दैटहाइडिंग कहा जाता है।

*) यदि एक चर को स्थिर के रूप में घोषित किया गया है तो वैरिएबल का मान सभी उदाहरणों के लिए समान है और हमें उस variable को कॉल करने के लिए ऑब्जेक्ट बनाने की आवश्यकता नहीं है। हम उस चर को आसानी से कॉल कर सकते हैं

classname.variablename;


एक और परिप्रेक्ष्य:

  1. रनटाइम पर एक वर्ग और इसका उदाहरण दो अलग-अलग चीजें हैं। उस वर्ग के सभी उदाहरणों द्वारा एक वर्ग की जानकारी "साझा" होती है।
  2. गैर स्थैतिक वर्ग चर उदाहरणों से संबंधित हैं और स्थैतिक चर वर्ग से संबंधित हैं।
  3. एक उदाहरण चर की तरह निजी या सार्वजनिक हो सकता है, स्थैतिक चर भी निजी या सार्वजनिक हो सकते हैं।

एक निजी स्थैतिक वर्ग चर का उपयोग क्या है?

मान लीजिए कि आपके पास लाइब्रेरी बुक क्लास है। प्रत्येक बार जब आप एक नई पुस्तक बनाते हैं, तो आप इसे एक अद्वितीय आईडी असाइन करना चाहते हैं। एक तरीका यह है कि बस 0 से शुरू करें और आईडी नंबर बढ़ाएं। लेकिन, आखिरी बनाई गई आईडी संख्या को अन्य सभी पुस्तकों को कैसे पता चलेगा? सरल, इसे स्थिर चर के रूप में सहेजें। क्या संरक्षकों को यह जानने की ज़रूरत है कि वास्तविक आंतरिक आईडी संख्या प्रत्येक पुस्तक के लिए है? नहीं, वह जानकारी निजी है।

public class Book {
    private static int numBooks = 0;
    private int id;
    public String name;

    Book(String name) {
        id = numBooks++;
        this.name = name;
    }
}

यह एक संक्षिप्त उदाहरण है, लेकिन मुझे यकीन है कि आप उन मामलों के बारे में आसानी से सोच सकते हैं जहां आप सभी कक्षा के उदाहरणों को सामान्य जानकारी तक पहुंच प्राप्त करना चाहते हैं जिन्हें हर किसी से निजी रखा जाना चाहिए। या यहां तक ​​कि यदि आप नहीं कर सकते हैं, तो यह चीजों को यथासंभव निजी बनाने के लिए अच्छा प्रोग्रामिंग अभ्यास है। क्या होगा यदि आपने गलती से उस numBooks क्षेत्र को सार्वजनिक किया, भले ही पुस्तक उपयोगकर्ताओं को इसके साथ कुछ भी करने की आवश्यकता न हो। फिर कोई नई पुस्तक बनाने के बिना किताबों की संख्या बदल सकता है।

बहुत चुस्त!


खैर, उस वर्ग के उदाहरणों के दौरान डेटा साझा करने के लिए private static चर का उपयोग किया जा सकता है। जबकि आप सही हैं कि हम ClassName.member या ClassInstance.member जैसी संरचनाओं का उपयोग करके private static चर का उपयोग नहीं कर सकते हैं, लेकिन सदस्य हमेशा उस वर्ग या उस वर्ग के उदाहरणों से दिखाई देंगे। तो उस वर्ग के प्रभाव के उदाहरण हमेशा सदस्य को संदर्भित करने में सक्षम होंगे।


जब एक स्थिर विधि में आप एक चर का उपयोग करते हैं, तो चर को एक उदाहरण के रूप में स्थिर भी होना चाहिए:

private static int a=0;  
public static void testMethod() {  
        a=1;  
}

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


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

public class PrivateStatic {

private static int var = 10;
public void setVar(int newVal) {
    var = newVal;
}

public int getVar() {
    return var;
}

public static void main(String... args) {
    PrivateStatic p1 = new Sub1();
    System.out.println(PrivateStatic.var);
    p1.setVar(200);

    PrivateStatic p2 = new Sub2();
    System.out.println(p2.getVar());
}
}


class Sub1 extends PrivateStatic {

}

class Sub2 extends PrivateStatic {
}

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

public class test {
private static int eye=2;
private int leg=3;

public test (int eyes, int legs){
    eye = eyes;
    leg=leg;
}

public test (){
}

public void print(){
    System.out.println(eye);
    System.out.println(leg);
}

public static void main(String[] args){
    test PersonA = new test();      
    test PersonB = new test(14,8);
    PersonA.print();    
}

}

> 14 3


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

public Class Company {
    private static int numCompanies;

    public static int getNumCompanies(){
        return numCompanies;
    }
}

फिर आप sysout कर सकते हैं:

Company.getNumCompanies();

आप कक्षा के प्रत्येक उदाहरण (जिसे मैं पूरी तरह से समझ नहीं पा रहा हूं) से numCompanies तक पहुंच प्राप्त कर सकता हूं, लेकिन यह "स्थैतिक तरीके" में नहीं होगा। मुझे नहीं पता कि यह सबसे अच्छा अभ्यास है या नहीं, लेकिन यह मुझे समझ में आता है।


यदि एक चर को सार्वजनिक स्थैतिक के रूप में परिभाषित किया गया है तो इसे किसी भी वर्ग से अपने वर्ग के नाम से एक्सेस किया जा सकता है।

आम तौर पर कार्यों को सार्वजनिक स्थैतिक के रूप में परिभाषित किया जाता है जिसे केवल कार्यान्वयन वर्ग नाम पर कॉल करके एक्सेस किया जा सकता है।

इसका एक बहुत अच्छा उदाहरण थ्रेड क्लास में sleep() विधि है

Thread.sleep(2500);

यदि एक चर को निजी स्थैतिक के रूप में परिभाषित किया जाता है तो इसे केवल उस कक्षा के भीतर ही पहुंचा जा सकता है, इसलिए किसी भी वर्ग का नाम आवश्यक नहीं है या आप अभी भी कक्षा का नाम (आप तक) का उपयोग कर सकते हैं। निजी var_name और निजी स्थैतिक var_name के बीच का अंतर यह है कि निजी स्थैतिक चर केवल कक्षा के स्थिर तरीकों से ही पहुंचा जा सकता है जबकि निजी चर को उस वर्ग की किसी भी विधि (स्थिर विधियों को छोड़कर) तक पहुंचा जा सकता है।

इसका एक बहुत अच्छा उदाहरण डेटाबेस कनेक्शन या स्थिरांक को परिभाषित करते समय है, जो वैरिएबल को निजी स्थिर के रूप में घोषित करने की आवश्यकता है।

एक और आम उदाहरण है

private static int numberOfCars=10;

public static int returnNumber(){

return numberOfCars;

}

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

यहाँ एक उदाहरण है:

Class test {
   public static String name = "AA";
   private static String age;

   public static void setAge(String yourAge) {
       //here if the age variable is not static you will get an error that you cannot access non static variables from static procedures so you have to make it static and private to not be accessed from other classes
       age = yourAge;
   }
}

स्टेटिक वैरिएबल वे वेरिएबल्स हैं जो कक्षा के सभी उदाहरणों के लिए आम हैं .. अगर एक उदाहरण इसे बदलता है .. तो स्थिर वैरिएबल का मूल्य अन्य सभी उदाहरणों के लिए अपडेट किया जाएगा





private