"प्राध्यापक आपल्या गडबडीतून बाहेर पडू शकत नाही. व्याख्यान देण्याची सवय असलेले जुने शिक्षक नेहमीच असे असतात. तुम्हाला पुस्तकात सापडणार नाही असे तो तुम्हाला सांगू शकत नाही. तुम्ही ऐकून पोहायला शिकत नाही . स्विमिंग लेक्चर्ससाठी. लेक्चर्स फक्त तेव्हाच उपयोगी असतात जेव्हा तुम्ही या विषयाशी परिचित असाल आणि तुमच्या प्रोफेसरइतकेच तुम्हाला माहिती असेल."

"तरीही, त्याचे धडे उपयुक्त आहेत."

"हो. म्हणजे, आम्हाला आशा आहे की ते असतील. तुम्ही ऐकता त्या विषयावर जितके अधिक दृष्टीकोन ठेवाल तितके तुम्ही सत्याच्या जवळ जाल. जेव्हा तुम्ही फक्त एकच ऐकाल, तेव्हा तुम्ही फक्त त्यावर विश्वास ठेवू शकता किंवा त्यावर विश्वास ठेवू शकता. ठीक आहे, चला व्यवसायावर परत जा."

"मी तुम्हाला आधी दाखवलेले चित्र पाहूया."


public class Variables

{
   private static String TEXT = "The end.";
  ┗━━━━━━━━━━━━━━━━━━━┛
   public static void main (String[] args)
                          ┗━━━━━━━┛
  {
     System.out.println("Hi");
     String s = "Hi!";
   ┏┗━━━━┛
    System.out.println(s);
    if (args != NULL)
    {
       String s2 = s;
      ┗━━━━┛
   
      System.out.println(s2);
     
    }
    Variables variables = new Variables();
    System.out.println(variables.instanceVariable);
    System.out.println(TEXT);
   
  }
 
   public String instanceVariable;
  ┗━━━━━━━━━━━━━━━┛
   public Variables()
   {
      instanceVariable = "Instance variable test.";
   }
}

1. मेथडमध्‍ये घोषित केलेले व्हेरिएबल त्‍याच्‍या डिक्लेरेशनच्‍या सुरूवातीपासून मेथडच्‍या शेवटपर्यंत अस्‍तित्‍वात असते (दृश्‍यमान असते).

2. कोड ब्लॉकमध्ये घोषित केलेले व्हेरिएबल कोड ब्लॉकच्या समाप्तीपर्यंत अस्तित्वात असते.

3. पद्धत परत येईपर्यंत पद्धतीचे मापदंड अस्तित्वात असतात.

4. ऑब्जेक्टमधील व्हेरिएबल्स त्या वस्तूच्या संपूर्ण आयुष्यादरम्यान अस्तित्वात असतात. त्यांची दृश्यमानता विशेष ऍक्सेस मॉडिफायर्सद्वारे देखील नियंत्रित केली जाते.

5. स्टॅटिक (क्लास) व्हेरिएबल्स संपूर्ण कार्यक्रम चालू असताना अस्तित्वात असतात. त्यांची दृश्यमानता देखील ऍक्सेस मॉडिफायर्सद्वारे परिभाषित केली जाते."

"बरोबर. मला हे चित्र आठवते."

"छान. मी तुम्हाला काही महत्त्वाच्या मुद्यांची आठवण करून देतो."

"पद्धतीच्या आत घोषित केलेले सर्व चल अस्तित्वात आहेत (दृश्यमान आहेत) ते ज्या बिंदूपासून ते पद्धत संपेपर्यंत घोषित केले जातात (उदाहरण 1)."

"कोड ब्लॉकमध्ये व्हेरिएबल घोषित केले असल्यास, ते कोड ब्लॉकच्या शेवटपर्यंत अस्तित्वात असते (उदाहरण 2)."

"जर व्हेरिएबल हे मेथड पॅरामीटर असेल, तर ते पद्धतीच्या संपूर्ण भागामध्ये (उदाहरण 3) अस्तित्वात आहे (दृश्यमान आहे)."

"जर व्हेरिएबल इन्स्टन्स व्हेरिएबल असेल (उदाहरण 4), तो एका विशिष्ट ऑब्जेक्टशी जोडलेला असतो आणि जोपर्यंत ऑब्जेक्ट अस्तित्वात असतो तोपर्यंत अस्तित्वात असतो. जर कोणतीही ऑब्जेक्ट अस्तित्वात नसेल, तर व्हेरिएबलची कोणतीही उदाहरणे नाहीत. तुम्ही व्हेरिएबलमध्ये प्रवेश करू शकता (उदा. व्हेरिएबल दृश्यमान आहे) वर्गाच्या सर्व पद्धतींमधून, ते त्याच्या आधी किंवा नंतर घोषित केले गेले असले तरीही. प्रत्येक ऑब्जेक्टसाठी नवीन व्हेरिएबल तयार केले जाते. ते इतर ऑब्जेक्ट्सपासून स्वतंत्र आहे. तुम्ही स्टॅटिक पद्धतींमधून इन्स्टन्स व्हेरिएबलमध्ये प्रवेश करू शकत नाही . _

"जर व्हेरिएबलला स्टॅटिक घोषित केले असेल, म्हणजे स्टॅटिक या कीवर्डने चिन्हांकित केले असेल, तर तो जोपर्यंत त्याचा वर्ग अस्तित्वात आहे तोपर्यंत तो अस्तित्वात असतो. JVM सामान्यत: क्लासला त्याच्या पहिल्या वापराच्या वेळी मेमरीमध्ये लोड करते. स्टॅटिक व्हेरिएबल्स सुरू केल्यावर देखील."

व्हेरिएबल स्कोप बद्दल अधिक - १

"वरील उदाहरण कॅट क्लास घोषित करते, ज्यामध्ये चार व्हेरिएबल्स आहेत: a, b, s (नॉन-स्टॅटिक व्हेरिएबल्स), आणि काउंट (एक स्टॅटिक व्हेरिएबल). जर आपण या वर्गाच्या अनेक ऑब्जेक्ट्स तयार केल्या (म्हणा, तीन), तर प्रत्येक त्यामध्ये वर्गाच्या नॉन-स्टॅटिक व्हेरिएबल्सची स्वतःची उदाहरणे असतील. एक स्टॅटिक व्हेरिएबल वर्गाच्या सर्व ऑब्जेक्ट्सद्वारे सामायिक केले जाते. तांत्रिकदृष्ट्या बोलायचे झाल्यास, ते या ऑब्जेक्ट्समध्ये देखील नसते, कारण ते कोणत्याही मांजरीच्या वस्तू तयार होण्यापूर्वीच अस्तित्वात होते."

s"आम्ही व्हेरिएबल स्टॅटिक घोषित केल्यास काय होते ते येथे आहे :"

व्हेरिएबल स्कोप बद्दल अधिक - 2

"ठीक आहे. मला वाटतं मला पटलं."

"तुम्ही त्याच नावाने व्हेरिएबल्स घोषित करू शकता?"

"मेथडमध्ये नाही. मेथडमध्ये घोषित केलेल्या सर्व व्हेरिएबल्सना अनन्य नावे असणे आवश्यक आहे. पद्धतीचे वितर्क देखील स्थानिक चल मानले जातात."

"सदस्य व्हेरिएबल्सचे काय?"

"सदस्य व्हेरिएबल्स देखील प्रत्येक वर्गासाठी अद्वितीय असणे आवश्यक आहे."

"परंतु एक अपवाद आहे: स्थानिक व्हेरिएबल्स आणि सदस्य व्हेरिएबल्सची नावे एकसारखी असू शकतात. "

"जर आपण असे व्हेरिएबल बदलले, तर दोन समान नामांकित व्हेरिएबल्सपैकी कोणता बदल होईल?"

"आमच्या कोडमध्ये अनेक दृश्यमान (अॅक्सेसिबल) व्हेरिएबल्स असल्यास - म्हणा, एक उदाहरण व्हेरिएबल आणि स्थानिक व्हेरिएबल - स्थानिक व्हेरिएबलमध्ये प्रवेश केला जाईल."

दोन गणना व्हेरिएबल्ससह उदाहरण
class Main
{
    public int count = 0;     // Declare an instance variable

    public void run()
    {
        count = 15;           // Access the instance variable
        int count = 10;       // Declare a local method variable
        count++;             // Access the method variable
    }
}

"हा कोड दोन काउंट व्हेरिएबल्स घोषित करतो. लाइन 3 इंस्टन्स व्हेरिएबल घोषित करते आणि ओळ 8 - एक स्थानिक व्हेरिएबल ."

"रन पद्धत अंमलात आणल्यावर काय होते ते येथे आहे:"

"7 व्या ओळीत, आम्ही इन्स्टन्स व्हेरिएबलमध्ये प्रवेश करतो आणि त्यास 15 मूल्य नियुक्त करतो"

"8 व्या ओळीत, आम्ही एक नवीन लोकल व्हेरिएबल घोषित करतो (तयार करतो) : count. हे इन्स्टन्स व्हेरिएबलला मास्क करते. स्थानिक व्हेरिएबल म्हणजे मेथडमधील त्यानंतरचे सर्व कोड दिसेल (अॅक्सेस)."

"समजले."

"स्थानिक व्हेरिएबल इन्स्टन्स व्हेरिएबलला मास्क करते. दुसऱ्या शब्दांत, स्थानिक व्हेरिएबलमध्ये प्रवेश केला जातो. तथापि, तुम्ही इन्स्टन्स व्हेरिएबलमध्ये देखील प्रवेश करू शकता. तसे करणे थोडे अधिक क्लिष्ट आहे."

स्थिर (वर्ग) चल
ClassName.variableName

// Here are some examples:
Cat.catsCount
नॉन-स्टॅटिक (उदाहरणार्थ) व्हेरिएबल
this.variableName

// Here are some examples:
this.catsCount

"स्टॅटिक पद्धती आणि स्टॅटिक व्हेरिएबल्सबद्दल तुम्ही मला आणखी काय सांगू शकता?"

"स्थिर पद्धती आणि व्हेरिएबल्स क्लासच्या ऑब्जेक्ट्सशी जोडलेले नसतात; ते क्लासशीच जोडलेले असतात. जर आपण दहा व्हेरिएबल्स ऑब्जेक्ट्स तयार केले (या लेव्हलच्या सुरुवातीला उदाहरण पहा), तर आपल्याकडे दहा इन्स्टन्स व्हेरिएबल व्हेरिएबल्स असतील (प्रत्येकसाठी एक ऑब्जेक्ट) आणि फक्त एक सामायिक (स्थिर) व्हेरिएबल TEXT ."

"माझा एक प्रश्न आहे."

"स्थिर आणि नॉन-स्टॅटिक पद्धतींमध्ये काय फरक आहे?"

"नॉन-स्टॅटिक पद्धत कशी कार्य करते ते पाहूया:"

कोड कसा दिसतो
Cat cat = new Cat();
String name = cat.getName();
cat.setAge(17);
cat.setChildren(cat1, cat2, cat3);
खरोखर काय होते
Cat cat = new Cat();
String name = Cat.getName(cat);
Cat.setAge(cat,17);
Cat.setChildren(cat, cat1, cat2, cat3);

"जेव्हा तुम्ही <object> dot <method name> वापरून मेथडला कॉल करता , तेव्हा तुम्ही क्लास मेथडला कॉल करता आणि त्याच ऑब्जेक्टला पहिल्या वितर्क प्रमाणे पास करता. मेथडच्या आत, ऑब्जेक्टला 'this' म्हणतात . मधील सर्व ऑपरेशन्स पद्धत या ऑब्जेक्ट आणि त्याच्या डेटावर केली जाते."

"व्वा! तर हे सर्व कसे चालते!"

"आणि अशा प्रकारे स्थिर पद्धत कार्य करते."

कोड कसा दिसतो
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount();
खरोखर काय होते
Cat cat1 = new Cat();
Cat cat2 = new Cat();
int catCount = Cat.getAllCatsCount(null);

"जेव्हा तुम्ही स्टॅटिक मेथड कॉल करता, तेव्हा त्यावर कोणतीही ऑब्जेक्ट पास केली जात नाही. दुसऱ्या शब्दांत, 'हे' शून्य असते . म्हणूनच स्टॅटिक मेथड नॉन-स्टॅटिक व्हेरिएबल्स आणि पद्धतींमध्ये प्रवेश करू शकत नाही (कारण त्यात पास करण्यासाठी 'हे' नाही. या पद्धतींकडे)."

"ह्म्म्म. मला वाटतं मला पटलं. थोडं तरी."

"आणि इथे आले अंकल दिएगो... आणि त्याची कामे."