1. Constante

Multe alte limbaje de programare au constante , adică variabile ale căror valori nu pot fi modificate . De obicei, ele sunt folosite pentru un fel de lucru fundamental, cum ar fi numărul Pisau numărul de zile din lunile anului. Acestea fiind spuse, în principiu, un programator poate face din orice variabilă o constantă, dacă el sau ea decide că acest lucru este necesar.

Deci, cum declari o variabilă imuabilă (constantă) în Java? Există un cuvânt cheie special pentru aceasta: final. Crearea unei variabile imuabile arată la fel cu crearea uneia obișnuite. Singura diferență este că înainte de tipul variabilei trebuie să scrieți cuvântul final, astfel:

final Type name = value;

Dacă încercați să atribuiți o valoare diferită unei finalvariabile, atunci programul dvs. pur și simplu nu se va compila.

O finalvariabilă trebuie inițializată (trebuie să-i fie atribuită o valoare) atunci când este declarată. Există o excepție de la această regulă: puteți muta inițializarea unei variabile de clasă statică într-un constructor. Dar veți afla despre asta la nivelul 10 .

Pentru a reduce numărul de cuvinte cheie, dezvoltatorii Java folosesc cuvântul finalpentru mai mult decât doar declararea constantelor. finalse poate aplica și metodelor și chiar claselor. Metodele declarate ca finalnu pot fi suprascrise, iar o clasă declarată ca finalnu poate fi moștenită.

Modificatorul finalpoate fi adăugat înaintea oricăror variabile: variabile locale, parametri de metodă, câmpuri de clasă și variabile de clasă statice.

Rețineți că finalînainte de numele unei variabile este doar protecție împotriva oricăror modificări aduse acelei variabile . Dacă o variabilă stochează o referință la un obiect, atunci obiectul poate fi schimbat în continuare.

Exemplu:

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

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

data[0] = 0;
data[1] = 0;
data[2] = 0;
Creăm o matrice.

Acest lucru nu este permis: variabila dataeste declarată ca final.

Dar poți face asta.
Si tot asta.

Constante globale

Dacă decideți să declarați constante globale în programul dvs., atunci trebuie să creați variabile de clasă statice și să le faceți publicși final. Există un stil special pentru numele unor astfel de variabile: acestea sunt scrise cu majuscule, cu un caracter de subliniere folosit pentru a separa cuvintele.

Exemple:

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. Umbrire variabilă

După cum am spus anterior, nu puteți crea mai multe variabile locale cu același nume în aceeași metodă. În diferite metode, poți.

Dar iată ceea ce probabil nu știți: variabilele de instanță și variabilele de metodă locale pot avea același nume.

Exemplu:

Cod Vizibilitate variabila
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

În addmetodă, am declarat o variabilă locală numită sum. Până la sfârșitul metodei, umbră (sau maschează ) sumvariabila de instanță.

Bine, zici tu, este de așteptat într-un anumit sens. Dar acesta nu este sfârșitul poveștii. Se pare că, dacă o variabilă de instanță este umbrită de o variabilă locală, există totuși o modalitate de a face referire la variabila de instanță în cadrul metodei. Facem acest lucru scriind thiscuvântul cheie înaintea numelui său:

this.name

Iată un exemplu în care conflictul de nume este rezolvat cu succes:

Cod Vizibilitate variabila
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

Variabilele count și sum sunt disponibile peste tot cu sau fără thiscuvântul cheie. Pe liniile în care sum variabila locală umbră variabila suminstanță, sum variabila instanță poate fi accesată numai folosind thiscuvântul cheie.

Dacă o variabilă de clasă statică mai degrabă decât o variabilă de instanță este umbrită, atunci trebuie să o accesați prin numele clasei și nu prin cuvântul thischeie:

ClassName.name

Exemplu:

Cod Vizibilitate variabila
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

Puteți accesa variabilele count și sum variabilele statice oriunde cu sau fără utilizarea numelui clasei Solutionca prefix. În acele linii în care sumvariabila locală umbră sumvariabila de instanță, accesul la sum variabila de instanță este posibil numai atunci când este utilizată Solutionca prefix.



3. Variabile în interiorul unei forbucle

Și încă un fapt mic, dar interesant.

Există, de asemenea, un loc în care o variabilă este declarată într-un mod special - în interiorul unei forbucle .

Vă puteți aminti că o forbuclă are de obicei o variabilă contor între paranteze. Și care va fi vizibilitatea acestei variabile? La urma urmei, nu se află în corpul buclei. Este întreaga metodă? Sau nu?

Răspunsul corect este: o variabilă declarată în antetul unei forbucle este vizibilă numai în corpul buclei și în antetul bucleifor .

Exemplu:

Cod Vizibilitate variabila
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

Deci, puteți oricând să scrieți bucle una după alta în codul dvs. și să utilizați variabile de contor cu același nume - asta nu va crea probleme.

Exemplu:

Cod Vizibilitate variabila
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