1. Mga lokal na variable

Magkaroon tayo ng mas seryosong pag-uusap tungkol sa mga variable. Ngunit sa pagkakataong ito ay hindi natin tatalakayin ang kanilang panloob na istraktura. Sa halip, magtutuon tayo sa kung paano nakikipag-ugnayan ang mga variable sa code kung saan matatagpuan ang mga ito.

Ang lahat ng mga variable na idineklara sa loob ng mga pamamaraan ay tinatawag na mga lokal na variable . Ang isang lokal na variable ay umiiral lamang sa bloke ng code kung saan ito idineklara. O, upang maging mas tumpak, umiiral ito mula sa sandaling ito ay idineklara hanggang sa katapusan ng bloke ng code kung saan ito idineklara.

Para sa pagiging simple, isaalang-alang natin ang isang halimbawa:

Code Variable visibility
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

Pag-usapan natin ang pag-access sa mga lokal na variable nang isa pang beses. Narito ang isang bloke ng code na binubuo ng mga kulot na brace: ito ay maaaring isang method body, ang katawan ng isang loop, o isang bloke lang ng code para sa isang conditional statement. Ang isang variable na ipinahayag sa isang bloke ng code ay umiiral hanggang sa katapusan ng bloke ng code na iyon.

Kung ang isang variable ay idineklara sa katawan ng loop, ito ay iiral lamang sa katawan ng loop. Ito ay nilikha at nawasak sa bawat pag-ulit ng loop.

Hindi ka maaaring magdeklara ng dalawang lokal na variable na may parehong pangalan sa isang paraan — hindi mag-compile ang program. Ngunit magagawa mo ito kung ang mga bloke ng code kung saan idineklara ang mga variable ay hindi magkakapatong.

Halimbawa:

Code Variable visibility
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

Nagawa naming magdeklara ng pangalawang lokal na variable na pinangalanan b lang dahil b hindi nakikita ang unang variable sa block ng code kung saan bidineklara ang pangalawang variable.


2. Mga Parameter

Tulad ng sinabi namin dati, ang bawat pamamaraan ay maaaring magkaroon ng mga variable na tinatawag naming mga parameter. Paano naman ang kanilang visibility at lifetime?

Diretso lang lahat. Ang mga parameter ay nilikha kapag ang mga hakbang sa pagpapatupad sa pamamaraan (ibig sabihin, kapag ang code ng pamamaraan ay nagsimulang magsagawa). Ang mga ito ay tinanggal kapag natapos na ang pamamaraan. Ang mga ito ay makikita sa buong katawan ng pamamaraan.

Halimbawa:

Code Variable visibility
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

Tulad ng sinabi namin kanina, argsay isang variable lamang na ang uri ay isang array ng mga string. At tulad ng lahat ng mga parameter, ito ay magagamit sa lahat ng dako sa loob ng katawan ng pamamaraan. Sabi nga, kadalasan ay binabalewala natin ito sa ating mga halimbawa.



3. Mga variable sa isang klase

Maaalala mo mula sa mga aralin sa Antas 1 na ang isang klase ay maaaring magkaroon ng mga pamamaraan at variable. Ang mga pamamaraan ay kung minsan ay tinatawag na mga pamamaraan ng halimbawa, at mga variable - mga variable ng halimbawa o mga patlang. Ang mga ito ay talagang kasingkahulugan sa Java.

Ano ang mga variable (o field) ng isang klase?

Ang mga ito ay mga variable na idineklara hindi sa isang pamamaraan, ngunit sa isang klase.

Maaari silang ma-access mula sa anumang (non-static) na pamamaraan ng isang klase. Sa halos pagsasalita, ang mga variable ng instance ay mga variable na ibinabahagi ng lahat ng mga pamamaraan ng isang klase.

Halimbawa:

Code Variable visibility
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

Sa halimbawang ito, mayroon kaming dalawang pamamaraan — add()at remove(). Ang add()pamamaraan ay dinaragdagan ang mga variable sumat countinstance, at remove()binabawasan ng pamamaraan ang sum mga countvariable. Gumagana ang parehong pamamaraan sa mga nakabahaging variable ng instance.

Umiiral ang mga lokal na variable habang isinasagawa ang isang pamamaraan. Ang mga variable ng instance ng isang klase ay umiiral sa loob ng isang bagay ng isang klase hangga't umiiral ang bagay na iyon. Matututuhan mo ang mga detalye tungkol sa mga bagay ng isang klase sa susunod na antas.


4. Mga static na variable

Tulad ng mga pamamaraan, ang mga variable sa isang klase ay maaaring static o non-static. Ang mga static na pamamaraan ay maaari lamang ma-access ang mga static na variable.

Sa Level 11, susuriin namin ang istruktura ng mga static na variable at pamamaraan at mauunawaan mo ang mga dahilan para sa mga paghihigpit na ito.

Upang makagawa ng static na variable (class variable), dapat mong isulat ang statickeyword sa deklarasyon nito.

Ang mga static na variable ay hindi nakatali sa isang bagay o instance ng klase kung saan sila idineklara. Sa halip, kabilang sila sa klase mismo. Iyon ang dahilan kung bakit umiiral ang mga ito kahit na walang isang bagay ng klase ang nalikha . Maaari kang sumangguni sa kanila mula sa iba pang mga klase gamit ang isang construct tulad ng:

ClassName.variableName

Halimbawa:

Code Variable visibility
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

Sa halimbawa sa itaas, lumikha kami ng isang hiwalay Storagena klase, inilipat ang count at sum mga variable dito, at idineklara silang static . Maaaring ma-access ang mga pampublikong static na variable mula sa anumang pamamaraan sa isang programa (at hindi lamang mula sa isang pamamaraan).