1. स्थिरांक

इतर अनेक प्रोग्रामिंग भाषांमध्ये स्थिरांक असतात , म्हणजेच व्हेरिएबल्स ज्यांची मूल्ये बदलता येत नाहीत . सहसा, ते काही मूलभूत गोष्टींसाठी वापरले जातात जसे की Piवर्षाच्या महिन्यांतील संख्या किंवा दिवसांची संख्या. असे म्हटले आहे की, तत्वतः, प्रोग्रामर कोणत्याही व्हेरिएबलला स्थिर बनवू शकतो, जर त्याने किंवा तिने ठरवले की तसे करणे आवश्यक आहे.

तर तुम्ही Java मध्ये अपरिवर्तनीय व्हेरिएबल (स्थिर) कसे घोषित कराल? यासाठी एक विशेष कीवर्ड आहे: final. अपरिवर्तनीय व्हेरिएबल तयार करणे सामान्य बनवण्यासारखेच दिसते. फरक एवढाच आहे की व्हेरिएबलच्या प्रकारापूर्वी तुम्हाला हा शब्द लिहावा लागेल final, जसे:

final Type name = value;

जर तुम्ही व्हेरिएबलला वेगळे मूल्य नियुक्त करण्याचा प्रयत्न केला final, तर तुमचा प्रोग्राम संकलित होणार नाही.

जेव्हा व्हेरिएबल finalघोषित केले जाते तेव्हा ते आरंभ करणे आवश्यक आहे (त्याला मूल्य नियुक्त करणे आवश्यक आहे). या नियमाला एक अपवाद आहे: तुम्ही स्टॅटिक क्लास व्हेरिएबलचे इनिशिएलायझेशन कन्स्ट्रक्टरमध्ये हलवू शकता. परंतु तुम्ही याविषयी लेव्हल 10 मध्ये शिकाल .

कीवर्डची संख्या कमी करण्यासाठी, Java डेव्हलपर हा शब्द finalफक्त स्थिरांक घोषित करण्यापेक्षा अधिक वापरतात. finalपद्धती आणि वर्गांना देखील लागू होऊ शकतात. म्हणून घोषित केलेल्या पद्धती finalअधिलिखित केल्या जाऊ शकत नाहीत आणि म्हणून घोषित केलेला वर्ग finalवारसा मिळू शकत नाही.

कोणत्याही व्हेरिएबल्सच्या आधी मॉडिफायर finalजोडला जाऊ शकतो: स्थानिक व्हेरिएबल्स, मेथड पॅरामीटर्स, क्लास फील्ड आणि स्टॅटिक क्लास व्हेरिएबल्स.

लक्षात घ्या की finalव्हेरिएबलच्या नावापूर्वी फक्त त्या व्हेरिएबलमधील कोणत्याही बदलांपासून संरक्षण आहे . जर व्हेरिएबल ऑब्जेक्टचा संदर्भ संग्रहित करत असेल, तर ऑब्जेक्ट अजूनही बदलला जाऊ शकतो.

उदाहरण:

final int[] data = {1, 2, 3, 4, 5, 6};

data = {6, 7, 8, 9};

data[0] = 0;
data[1] = 0;
data[2] = 0;
आम्ही अॅरे तयार करतो.

याची परवानगी नाही: व्हेरिएबल dataम्हणून घोषित केले आहे final.

पण तुम्ही हे करू शकता.
आणि हे देखील.

जागतिक स्थिरांक

जर तुम्ही तुमच्या प्रोग्राममध्ये जागतिक स्थिरांक घोषित करायचे ठरवले, तर तुम्हाला स्टॅटिक क्लास व्हेरिएबल्स तयार करणे आवश्यक आहे आणि ते publicआणि final. अशा व्हेरिएबल्सच्या नावांसाठी एक विशेष शैली आहे: ते सर्व कॅपिटल अक्षरांमध्ये लिहिलेले आहेत, शब्द वेगळे करण्यासाठी अंडरस्कोर वर्ण वापरला जातो.

उदाहरणे:

class Solution
{
   public static final String SOURCE_ROOT = "c:\\projects\\my\\";
   public static final int DISPLAY_WIDTH = 1024;
   public static final int DISPLAY_HEIGHT = 768;
}


2. परिवर्तनीय सावली

आम्ही आधी म्हटल्याप्रमाणे, तुम्ही एकाच पद्धतीत एकाच नावाने अनेक लोकल व्हेरिएबल्स तयार करू शकत नाही. वेगवेगळ्या पद्धतींमध्ये, आपण हे करू शकता.

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

उदाहरण:

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

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


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

पद्धतीमध्ये add, आम्ही नावाचे स्थानिक व्हेरिएबल घोषित केले sum. पद्धत संपेपर्यंत, ते इन्स्टन्स व्हेरिएबलची छाया (किंवा मुखवटा ) करते sum.

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

this.name

येथे एक उदाहरण आहे जेथे नावाचा विरोध यशस्वीरित्या सोडवला गेला आहे:

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

   public void add(int data)
   {
     int sum = data * 2;
     this.sum = this.sum + data;
     count++;
   }
}


this.count
this.count, this.sum
this.count, this.sum
this.count, this.sum
this.count, this.sum, data
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum

आणि count व्हेरिएबल्स sum कीवर्डसह किंवा त्याशिवाय सर्वत्र उपलब्ध आहेत this. ज्या ओळींवर sum लोकल व्हेरिएबल इन्स्टन्स व्हेरिएबलला सावली देते sum, sum इन्स्टन्स व्हेरिएबल फक्त कीवर्ड वापरून ऍक्सेस केले जाऊ शकते this.

इन्स्टन्स व्हेरिएबल ऐवजी स्टॅटिक क्लास व्हेरिएबल सावलीत असल्यास, तुम्हाला कीवर्डच्या ऐवजी क्लासच्या नावाद्वारे प्रवेश करणे आवश्यक आहे this:

ClassName.name

उदाहरण:

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

   public void add(int data)
   {
     int sum = data * 2;
     Solution.sum = Solution.sum + data;
     count++;
   }
}

Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum, data
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum

तुम्ही वर्गाचे नाव उपसर्ग म्हणून  वापरून किंवा न वापरता सर्वत्र count आणि स्थिर व्हेरिएबल्समध्ये प्रवेश करू शकता. ज्या ओळींमध्ये लोकल व्हेरिएबल इन्स्टन्स व्हेरिएबलला सावली देते, तिथे इन्स्टन्स व्हेरिएबलमध्ये प्रवेश केवळ उपसर्ग म्हणून  वापरतानाच शक्य आहे .sumSolutionsumsumsumSolution



3. forलूपच्या आत चल

आणि आणखी एक लहान पण मनोरंजक तथ्य.

अशी एक जागा देखील आहे जिथे व्हेरिएबल एका विशेष प्रकारे घोषित केले जाते — forलूपच्या आत .

तुम्हाला आठवत असेल की forलूपमध्ये सामान्यत: कंसात काउंटर व्हेरिएबल असते. आणि या व्हेरिएबलची दृश्यमानता काय असेल? शेवटी, ते लूपच्या शरीरात नाही. ही संपूर्ण पद्धत आहे का? किंवा नाही?

forबरोबर उत्तर आहे: लूपच्या शीर्षलेखात घोषित केलेले चल फक्त लूपच्या मुख्य भागामध्ये आणि लूपच्या शीर्षलेखामध्येfor दृश्यमान आहे .

उदाहरण:

कोड परिवर्तनीय दृश्यमानता
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a

त्यामुळे, तुम्ही तुमच्या कोडमध्ये नेहमी एकामागून एक लूप लिहू शकता आणि त्याच नावाने काउंटर व्हेरिएबल्स वापरू शकता - यामुळे कोणतीही समस्या निर्माण होणार नाही.

उदाहरण:

कोड परिवर्तनीय दृश्यमानता
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a, i
a, i
a, i
a
a
a