1. Állandók
Sok más programozási nyelvnek vannak konstansai , vagyis olyan változók, amelyek értékei nem változtathatók meg . Általában valamilyen alapvető dologra használják őket, mint például a Pi
napok száma vagy száma az év hónapjaiban. Ez azt jelenti, hogy elvileg a programozó bármely változót konstanssá tehet, ha úgy dönt, hogy ez szükséges.
Tehát hogyan deklarálunk egy megváltoztathatatlan változót (konstanst) a Java-ban? Van erre egy speciális kulcsszó: final
. Egy megváltoztathatatlan változó létrehozása ugyanúgy néz ki, mint egy közönséges változó létrehozása. Az egyetlen különbség az, hogy a változó típusa előtt meg kell írni a szót final
, így:
final Type name = value;
Ha megpróbál más értéket rendelni egy változóhoz final
, akkor a program egyszerűen nem fog lefordítani.
A final
változót deklaráláskor inicializálni kell (értéket kell hozzá rendelni). Ez alól egy kivétel van: a statikus osztályváltozó inicializálását áthelyezheti egy konstruktorba. De erről a 10. szinten fogsz tanulni .
A kulcsszavak számának csökkentése érdekében a Java fejlesztők ezt a szót final
nem csupán konstansok deklarálására használják. final
metódusokra, sőt osztályokra is vonatkozhat. A mintának deklarált metódusok final
nem bírálhatók felül, és a mintának deklarált osztály final
nem örökölhető.
A final
módosító bármely változó elé kerülhet: lokális változók, metódusparaméterek, osztálymezők és statikus osztályváltozók.
Ne feledje , hogy final
a változó előtti név csak védelem a változó bármilyen változása ellen . Ha egy változó hivatkozást tárol egy objektumra, akkor az objektum továbbra is módosítható.
Példa:
|
Készítünk egy tömböt. Ez nem megengedett: a data változót final . De ezt megteheti. És ezt is. |
Globális állandók
Ha úgy dönt, hogy globális konstansokat deklarál a programban, akkor statikus osztályváltozókat kell létrehoznia , és azokat public
és final
. Az ilyen változók nevének sajátos stílusa van: csupa nagybetűvel írják, a szavak elválasztására szolgáló aláhúzásjellel.
Példák:
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. Változó árnyékolás
Mint korábban említettük, nem hozható létre több, azonos nevű helyi változó ugyanazzal a módszerrel. Különböző módszerekkel megteheti.
De itt van, amit valószínűleg nem tud: a példányváltozóknak és a helyi metódusváltozóknak lehet ugyanaz a neve.
Példa:
Kód | Változó láthatóság |
---|---|
|
|
A add
metódusban egy helyi változót deklaráltunk sum
. A metódus végéig árnyékolja (vagy maszkolja ) a sum
példányváltozót.
Oké, azt mondod, ez bizonyos értelemben várható. De ezzel még nincs vége a történetnek. Kiderült, hogy ha egy példányváltozót egy lokális változó árnyékol be, akkor is van mód a metóduson belül a példányváltozóra hivatkozni. Ehhez a this
kulcsszót a neve elé írjuk:
this.name
Íme egy példa, ahol a névütközés sikeresen feloldásra került:
Kód | Változó láthatóság |
---|---|
|
|
A count
és sum
változók mindenhol elérhetők kulcsszóval vagy anélkül this
. Azokon a sorokon, ahol a sum
helyi változó árnyékolja a sum
példányváltozót, a példányváltozó csak a kulcsszó sum
használatával érhető el .this
Ha a példányváltozó helyett egy statikus osztályváltozó van árnyékolva, akkor azt az osztálynéven keresztül kell elérnie, nem pedig a this
kulcsszón keresztül:
ClassName.name
Példa:
Kód | Változó láthatóság |
---|---|
|
|
count
A és statikus változókat mindenhol elérheti sum
az osztálynév Solution
előtagként való használatával vagy anélkül. Azokban a sorokban, ahol a sum
lokális változó árnyékolja a sum
példányváltozót, a példányváltozóhoz csak előtagként sum
lehet hozzáférni.Solution
3. Változók for
cikluson belül
És még egy apró, de érdekes tény.
Van egy olyan hely is, ahol egy változót speciális módon deklarálnak – egy for
cikluson belül .
Emlékezhet arra, hogy a for
ciklusok általában zárójelben tartalmaznak egy számlálóváltozót. És mi lesz ennek a változónak a láthatósága? Végül is nem a hurok testében van. Ez az egész módszer? Vagy nem?
for
A helyes válasz: a ciklus fejlécében deklarált változó csak a ciklus törzsében és a ciklus fejlécébenfor
látható .
Példa:
Kód | Változó láthatóság |
---|---|
|
|
Tehát mindig írhat ciklusokat egymás után a kódba, és használhat azonos nevű számlálóváltozókat – ez nem okoz problémát.
Példa:
Kód | Változó láthatóság |
---|---|
|
|