स्थानीय चर

"अभिवादन, मेरे प्रिय छात्र! यह चरों के बारे में थोड़ा और गंभीर होने का समय है। लेकिन इस बार हम उनकी आंतरिक संरचना पर चर्चा नहीं करेंगे। इसके बजाय, हम इस बात पर ध्यान केंद्रित करेंगे कि वेरिएबल्स उस कोड के साथ कैसे इंटरैक्ट करते हैं जहां वे स्थित हैं।

"सभी वेरिएबल्स जिन्हें विधियों के अंदर घोषित किया जाता है , स्थानीय चर कहलाते हैं । एक स्थानीय चर केवल कोड के उस ब्लॉक में मौजूद होता है जिसमें इसे घोषित किया जाता है। या, अधिक सटीक होने के लिए, यह उस समय से मौजूद होता है जब इसे ब्लॉक के अंत तक घोषित किया जाता है। जिस कोड में इसे घोषित किया गया है।"

"स्पष्ट रूप से, मुझे एक उदाहरण चाहिए।"

"कोई बात नहीं। ये लो:

कोड परिवर्तनीय उपलब्धता
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

"आइए एक बार फिर स्थानीय चरों तक पहुँचने के नियमों पर गौर करें। यहाँ कोड का एक ब्लॉक है। इसकी शुरुआत और अंत क्या है?"

"घुंघराले ब्रेसिज़?"

"सही। यह एक विधि निकाय, एक लूप का शरीर, या एक सशर्त बयान के लिए कोड का एक ब्लॉक हो सकता है। कोड के एक ब्लॉक में घोषित चर कोड के उस ब्लॉक के अंत तक मौजूद रहता है। मुझे बताएं, कहां होगा एक लूप के शरीर में घोषित होने पर एक चर मौजूद है?"

"यह केवल पाश के शरीर में मौजूद होगा।"

"यह सही है। क्या अधिक है, यह लूप के प्रत्येक पुनरावृत्ति पर बनाया और नष्ट किया जाएगा।"

"इसका मतलब है कि आप एक ही विधि में एक ही नाम के साथ दो स्थानीय चर घोषित नहीं कर सकते - कार्यक्रम संकलित नहीं होगा। लेकिन आप ऐसा कर सकते हैं यदि कोड के ब्लॉक जहां चर घोषित किए गए हैं वे ओवरलैप नहीं होते हैं। "

"अमीगो, तुम मेरे पसंदीदा क्यों हो, इसका एक कारण है। इसे अपने मस्तिष्क में दृढ़ करने के लिए एक और उदाहरण लो।

कोड परिवर्तनशील दृश्यता
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

"हम bकेवल एक दूसरे स्थानीय चर का नाम घोषित करने में सक्षम थे क्योंकि पहला bचर उस कोड ब्लॉक में दिखाई नहीं देता है जहाँ दूसरा bचर घोषित किया गया है।

पैरामीटर

"जैसा कि हमने पहले कहा, प्रत्येक विधि में वेरिएबल्स हो सकते हैं जिन्हें हम पैरामीटर कहते हैं। उनकी दृश्यता और जीवनकाल के बारे में क्या?"

"हम्म ... मैं स्तब्ध हूं ..."

"यहाँ सब कुछ काफी सरल है। पैरामीटर तब बनाए जाते हैं जब निष्पादन विधि में कदम रखता है (अर्थात जब विधि का कोड निष्पादित करना शुरू करता है)। विधि समाप्त होने पर उन्हें समाप्त कर दिया जाता है।"

"दूसरे शब्दों में, वे विधि के पूरे शरीर में और केवल वहीं दिखाई दे रहे हैं?"

"हाँ। उदाहरण:

कोड परिवर्तनशील दृश्यता
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

"जैसा कि हमने पहले कहा, argsकेवल एक वेरिएबल है जिसका प्रकार स्ट्रिंग्स की एक सरणी है। और सभी मापदंडों की तरह, यह विधि के शरीर के भीतर हर जगह उपलब्ध है। उस ने कहा, हम आमतौर पर इसे हमारे उदाहरणों में अनदेखा करते हैं।

एक वर्ग में चर

"लेवल 1 के पाठों को याद रखें, जहां हमने कहा था कि एक क्लास में मेथड्स और वेरिएबल्स हो सकते हैं। मेथड्स को कभी-कभी इंस्टेंस मेथड्स और वेरिएबल्स - इंस्टेंस वेरिएबल्स या फील्ड्स कहा जाता है।

" कक्षा के चर (या फ़ील्ड) क्या हैं ?

वे चर हैं जो एक विधि में नहीं बल्कि एक वर्ग में घोषित किए जाते हैं।"

"और वे वहाँ किस लिए हैं?"

"शुरुआत करने वालों के लिए, उन्हें कक्षा के किसी भी (गैर स्थैतिक) विधि से एक्सेस किया जा सकता है। मोटे तौर पर बोलते हुए, उदाहरण चर वे चर होते हैं जो कक्षा के सभी तरीकों से साझा किए जाते हैं।

उदाहरण:

कोड परिवर्तनशील दृश्यता
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     count++;
   }

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum

"इस उदाहरण में, हमारे पास दो विधियाँ हैं - add()और remove()। विधि और आवृत्ति चर को add()बढ़ाती है , और विधि और चर को घटाती है । दोनों विधियाँ साझा आवृत्ति चर पर काम करती हैं।"sumcountremove()sumcount

"मैं यह सब समझता हूं! एक विधि निष्पादित होने पर स्थानीय चर मौजूद होते हैं। कक्षा के उदाहरण चर तब तक मौजूद होते हैं जब तक कि वह वस्तु मौजूद होती है।"

"शाबाश, अमीगो। हमने कुछ नींव तैयार कर ली है, और आप अगले स्तर में कक्षा की वस्तुओं के बारे में विवरण जानेंगे।

स्थैतिक चर

"विधियों की तरह, एक वर्ग में चर स्थिर या गैर-स्थैतिक हो सकते हैं। स्थैतिक विधियाँ केवल स्थैतिक चर तक पहुँच सकती हैं।

"मुझे स्थिर चरों की अभी तक स्पष्ट समझ नहीं है।"

"ओह, मुझे पता है, लेकिन चिंता मत करो। अभी के लिए, बस उनके साथ सहज हो जाओ। उनके साथ परिचित हो जाओ। स्तर 11 में, हम स्थैतिक चर और विधियों की संरचना का विश्लेषण करेंगे और आप इनके कारणों को समझेंगे प्रतिबंध।

"एक स्थिर चर (वर्ग चर) बनाने के लिए, आपको staticइसकी घोषणा में कीवर्ड लिखना होगा।

"स्थैतिक चर किसी वस्तु या उस वर्ग के उदाहरण के लिए बाध्य नहीं होते हैं जिसमें उन्हें घोषित किया जाता है। इसके बजाय, वे स्वयं वर्ग से संबंधित होते हैं। इसीलिए वे तब भी मौजूद होते हैं, जब वर्ग का एक भी वस्तु नहीं बनाया गया हो। आप इसका उल्लेख कर सकते हैं । उन्हें अन्य वर्गों से एक निर्माण का उपयोग करके:

ClassName.variableName

उदाहरण:

कोड परिवर्तनशील दृश्यता
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

"उपर्युक्त उदाहरण में, हमने एक अलग Storageवर्ग बनाया, इसमें countऔर चरों को स्थानांतरित किया, और उन्हें स्थिर घोषित किया । सार्वजनिक स्थिर चरों को किसी प्रोग्राम में किसी भी विधि से एक्सेस किया जा सकता है (और केवल एक विधि से नहीं)।"sum

"मैं पूरी तरह से नहीं समझता, लेकिन यह मेरे लिए सुविधाजनक लगता है।"

"तो यह है। और कभी-कभी यह जरूरी है। स्थिर चर और विधियों के बिना हम फंस जाएंगे।"

"उम्मीद है, मैं धीरे-धीरे इसका पता लगाने में सक्षम हो जाऊंगा।"

"हाँ, अवश्य करोगे।"