constante
„Amigo, știai că în Java nu toate variabilele pot fi modificate?”
„Cum e, Kim? Într-adevăr, cuvântul „variabil” vorbește despre schimbare.”
„Nu există nicio îndoială în acest sens. La fel ca multe alte limbaje de programare, Java are constante , adică variabile ale căror valori nu pot fi modificate . Și chiar cuvântul „constant” vorbește despre constanță.”
— Și pentru ce sunt?
„De obicei, ele sunt folosite pentru un fel de lucru fundamental, cum ar fi numărul Pi
sau 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ă făcând deci este necesar.”
„Vrei să spui ca un nume, culoarea unei mașini sau numele unei zile a săptămânii?”
"Ai ideea corectă. Orice lucru care nu ar trebui schimbat."
„Și cum arată aceste constante în Java?”
„Java are un cuvânt cheie special pentru ei: 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;
„Ce se întâmplă dacă creați o constantă și apoi încercați să-i atribuiți o valoare diferită?”
„Aceasta este întrebarea corectă de pus! Și răspunsul corect este acesta: dacă încercați să atribuiți o valoare diferită unei final
variabile, atunci programul dumneavoastră pur și simplu nu se va compila.”
„Ce se întâmplă dacă declari o final
variabilă, dar nu îi atribui o valoare?”
„Nu are rost să faci asta, deci nu este permis nici în Java. O final
variabilă trebuie inițializată atunci când este declarată, adică trebuie să îi alocați o valoare. Există o excepție de la această regulă: puteți muta inițializarea o variabilă de clasă statică într-un constructor. Dar veți afla despre asta mai târziu.
„Aceasta fiind spuse, nu tot ceea ce este final
este o constantă. Pentru a reduce numărul de cuvinte cheie, dezvoltatorii Java folosesc cuvântul final
pentru mai mult decât doar declararea constantelor. final
Se poate aplica și metodelor și chiar claselor. Metodele declarate ca final
nu pot fi suprascrise și o clasă declarat ca final
nu poate fi mostenit.”
"Uh... Overscris? Moștenit? Ce limbă vorbești acum?"
"Limbajul programării orientate pe obiecte. Veți ajunge la el foarte curând. Până atunci, bucurați-vă de terminologia frumoasă."
"Bine. Deci, final
poate fi pus înaintea variabilelor, claselor și metodelor, iar acest cuvânt cheie le face imuabile într-un anumit sens?"
„Da. În plus, final
modificatorul poate fi adăugat înaintea oricăror variabile: variabile locale, parametri de metodă, câmpuri de clasă și variabile statice de clasă.
„Iată lucrul important de reținut: final
înainte ca 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.”
— Nu prea înțeleg.
„Veți înțelege foarte curând. Iată un exemplu:
|
Creăm o matrice. Acest lucru nu este permis: variabila data este declarată ca final . Dar poți face asta. Si tot asta. |
— Am înțeles. E complicat.
Constante globale
„Ce crezi că sunt constantele globale?”
„Bănuiesc că constantele globale sunt probabil ca variabilele globale, doar constante?”
„Exact. Dacă trebuie să declarați constante globale în programul dvs., creați variabile statice de clasă și faceți-le 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 cuvinte separate.
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;
}
Umbrire variabilă
„Așa cum am spus înainte, nu puteți crea mai multe variabile locale cu aceleași nume într-o singură metodă. În diferite metode, puteți.”
"Știu că!"
„Dar ceea ce probabil nu știți este că variabilele dintr-o clasă și variabilele locale dintr-o metodă pot avea același nume.
Exemplu:
Cod | Vizibilitate variabila |
---|---|
|
|
„În add
metodă, am declarat o variabilă locală numită sum
. Până la sfârșitul metodei, umbră (sau maschează ) sum
variabila de instanță.”
„Hmm... aș spune într-un fel că acesta este comportamentul așteptat”.
„Dar acesta nu este sfârșitul poveștii. Se dovedește 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 cuvântul cheie înaintea numelui său this
. :
this.name
„Iată un exemplu în care conflictul de nume este rezolvat cu succes:
Cod | Vizibilitate variabila |
---|---|
|
|
Variabilele count
și sum
sunt disponibile peste tot cu sau fără this
cuvântul cheie. Pe liniile în care sum
variabila locală umbră variabila sum
instanță, sum
variabila instanță poate fi accesată numai folosind this
cuvântul cheie.
— Evident, va trebui să exersez asta.
— Te vei descurca.
„Ce se întâmplă dacă o variabilă de clasă statică este umbrită mai degrabă decât doar o variabilă de instanță (nestatică)? Nu o puteți accesa prin intermediul this
?”
„Ai dreptate. Acest cuvânt cheie nu va funcționa. Trebuie să te referi la el prin numele clasei:
ClassName.name
Exemplu:
Cod | Vizibilitate variabila |
---|---|
|
|
„Atenție: puteți accesa variabilele count
și sum
variabilele statice oriunde cu sau fără utilizarea numelui clasei Solution
ca prefix. În acele linii în care sum
variabila locală umbrește sum
variabila instanță, accesul la sum
variabila clasă este posibil numai atunci când este utilizat Solution
ca prefix.
Variabile în interiorul unei for
bucle
„Și încă un fapt mic, dar interesant. Există, de asemenea, un loc în care o variabilă este declarată într-un mod special – vorbesc despre în interiorul unei for
bucle .” De obicei, o for
buclă are o counter
variabilă între paranteze. Și care va fi vizibilitatea acestei variabile? La urma urmei, nu se află în corpul buclei. Este întreaga metodă? Sau nu?"
"Am auzit deja ceva despre asta. După cum am înțeles , o variabilă declarată în antetul unei for
bucle este vizibilă numai în corpul buclei și în antetul bucleifor
."
„Bravo, Amigo. Dar totuși, aruncă o privire la un exemplu pentru a consolida acest material:
Cod | Vizibilitate variabila |
---|---|
|
|
„Deci spui că în codul meu aș putea scrie mai multe bucle una după alta cu o variabilă contor cu același nume și nu vor fi probleme?”
„Nu ar fi probleme. Uite, uite:
Cod | Vizibilitate variabila |
---|---|
|
|