1. Mga Constant

Maraming iba pang mga programming language ang may constants , iyon ay, mga variable na ang mga value ay hindi mababago . Karaniwan, ginagamit ang mga ito para sa ilang uri ng pangunahing bagay tulad ng bilang Pio bilang ng mga araw sa mga buwan ng taon. Iyon ay sinabi, sa prinsipyo, ang isang programmer ay maaaring gumawa ng anumang variable na isang pare-pareho, kung siya ay nagpasya na ang paggawa nito ay kinakailangan.

Kaya paano mo idineklara ang isang hindi nababagong variable (constant) sa Java? Mayroong espesyal na keyword para dito: final. Ang paglikha ng isang hindi nababagong variable ay mukhang katulad ng paglikha ng isang ordinaryong. Ang pagkakaiba lang ay bago ang uri ng variable kailangan mong isulat ang word final, tulad nito:

final Type name = value;

Kung susubukan mong magtalaga ng ibang halaga sa isang finalvariable, kung gayon ang iyong program ay hindi mag-compile.

Dapat masimulan ang isang finalvariable (dapat italaga dito ang isang value) kapag ito ay idineklara. May isang pagbubukod sa panuntunang ito: maaari mong ilipat ang pagsisimula ng isang static na variable ng klase sa isang constructor. Ngunit malalaman mo ang tungkol dito sa Level 10 .

Upang bawasan ang bilang ng mga keyword, ginagamit ng mga developer ng Java ang salita finalpara sa higit pa sa pagdedeklara ng mga constant. finalmaaari ding ilapat sa mga pamamaraan at maging sa mga klase. Ang mga pamamaraan na idineklara bilang finalhindi maaaring i-override, at ang isang klase na idineklara bilang finalhindi maaaring mamana.

finalMaaaring idagdag ang modifier bago ang anumang mga variable: mga lokal na variable, mga parameter ng pamamaraan, mga field ng klase, at mga static na variable ng klase.

Tandaan na finalbago ang isang variable na pangalan ay proteksyon lamang laban sa anumang mga pagbabago sa variable na iyon . Kung ang isang variable ay nag-iimbak ng isang sanggunian sa isang bagay, kung gayon ang bagay ay maaari pa ring baguhin.

Halimbawa:

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

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

data[0] = 0;
data[1] = 0;
data[2] = 0;
Lumilikha kami ng isang array.

Ito ay hindi pinapayagan: ang datavariable ay idineklara bilang final.

Ngunit magagawa mo ito.
At ito rin.

Global constants

Kung magpasya kang magdeklara ng mga global constant sa iyong programa, kailangan mong lumikha ng mga static na variable ng klase , at gawin ang mga ito publicat final. Mayroong isang espesyal na istilo para sa mga pangalan ng naturang mga variable: ang mga ito ay nakasulat sa lahat ng malalaking titik, na may underscore na character na ginagamit upang paghiwalayin ang mga salita.

Mga halimbawa:

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. Variable shadowing

Gaya ng sinabi namin dati, hindi ka makakagawa ng ilang lokal na variable na may parehong pangalan sa parehong paraan. Sa iba't ibang paraan, magagawa mo.

Ngunit narito ang malamang na hindi mo alam: ang mga variable ng halimbawa at mga variable ng lokal na pamamaraan ay maaaring magkaroon ng parehong pangalan.

Halimbawa:

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

Sa addpamamaraan, nagdeklara kami ng isang lokal na variable na pinangalanang sum. Hanggang sa katapusan ng pamamaraan, nililiman nito (o tinatakpan ) ang sumvariable ng instance.

Okay, sabi mo, iyon ay inaasahan sa ilang kahulugan. Ngunit hindi iyon ang katapusan ng kuwento. Lumalabas na kung ang isang variable ng instance ay nililiman ng isang lokal na variable, mayroon pa ring paraan upang sumangguni sa variable ng instance sa loob ng pamamaraan. Ginagawa namin ito sa pamamagitan ng pagsulat ng thiskeyword bago ang pangalan nito:

this.name

Narito ang isang halimbawa kung saan matagumpay na naresolba ang hindi pagkakasundo ng pangalan:

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

Ang count at sum mga variable ay magagamit saanman mayroon o wala ang thiskeyword. Sa mga linya kung saan sum nililiman ng lokal na variable ang sumvariable ng instance, sum maa-access lang ang variable ng instance gamit ang thiskeyword.

Kung ang isang static na variable ng klase sa halip na isang instance variable ay na-shadow, pagkatapos ay kailangan mong i-access ito sa pamamagitan ng pangalan ng klase sa halip na ang thiskeyword:

ClassName.name

Halimbawa:

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

Maaari mong ma-access ang count at sum static na mga variable saanman mayroon o hindi ginagamit ang pangalan ng klase Solutionbilang prefix. Sa mga linyang iyon kung saan sumnililiman ng lokal na variable ang variable ng instance,  posible lang ang sumaccess sa variable ng instance kapag ginagamit bilang prefix.sumSolution



3. Mga variable sa loob ng isang forloop

At isa pang maliit ngunit kawili-wiling katotohanan.

Mayroon ding isang lugar kung saan ang isang variable ay idineklara sa isang espesyal na paraan — sa loob ng isang forloop .

Maaari mong maalala na ang isang forloop ay karaniwang may counter variable sa mga panaklong. At ano ang magiging visibility ng variable na ito? Pagkatapos ng lahat, wala ito sa katawan ng loop. Ito ba ang buong pamamaraan? O hindi?

Ang tamang sagot ay: ang isang variable na ipinahayag sa header ng isang forloop ay makikita lamang sa katawan ng loop at sa header ng forloop .

Halimbawa:

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

Kaya, maaari kang palaging magsulat ng mga loop nang sunud-sunod sa iyong code at gumamit ng mga counter variable na may parehong pangalan — na hindi lilikha ng anumang mga problema.

Halimbawa:

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