Konstanty v Javě
-
Konstanty slouží pro pojmenování určitých konkrétních hodnot se zvláštním významem v programu — tzv. magic numbers, kde nemusí být na první pohled zřejmé, proč je to zrovna právě ta hodnota.
-
Třeba
static final int MAX_CAPACITY = 12
může znamenat konstantu, která se může v dalších verzích programu zvětšit. -
Konstanty v Javě jsou vždy umístěny v některé ze tříd či rozhraní - nemohou jen tak globálně "plavat nad vším".
-
Proto si ji rozumně pojmenujeme a pak používáme tento identifikátor místo přímé hodnoty.
-
Může jít i o objektové typy (např. konstanta typu
Person
).
Všeobecně platí: raději víc konstant než míň. |
Připomenutí: konstanty v Pythonu
Create a constant.py:
# declare constants
PI = 3.14
GRAVITY = 9.8
-
Jmenná konvence (velká písmena) je stejná jako v Javě.
-
V Pythonu je to jen konvence, lze znovu přiřadit, tj.
PI = 3.2
je technicky možné. -
V Javě bráníme opakovanému přiřazení označením symbolu jako
final
.
Definice konstanty
-
Konstanty jsou vždy:
- Statické (
static
) -
stačí nám jedna hodnota pro celou třídu, nemá smysl, aby každý objekt měl svou stejnou kopii.
- Neměnné (
final
) -
je to konstanta, tudíž pomocí
final
zajistíme neměnnost
- Statické (
-
Konstanta může být:
private
-
dobře možné, když ji nechceme používat mimo třídu
public
-
nicméně asi obvyklejší, většinou má širší použití
Příklad konstanty
public static final int MAX_PEOPLE_COUNT = 100;
public boolean maxPeopleCountReached() {
return peopleCount >= MAX_PEOPLE_COUNT;
}
int count = Person.MAX_PEOPLE_COUNT;
Všimněte si, že uvádíme i název třídy,
ve které je konstanta definovaná Person.MAX_PEOPLE_COUNT .
Je to sice delší, ale je to tak vlastně dobře: umístění
do tříd je zapouzdřením konstanty - hned vidíme, kam patří a co znamená.
Můžeme dokonce zkrátit její název Person.MAX_COUNT
|
Klíčové slovo final
-
Slovo
final
způsobuje, že daná hodnota se v proměnné nemůže změnit. -
V objektové proměnné je uložena adresa (odkaz),
-
final
odkaz se tedy změnit nemůže, ale vnitřek (atributy) objektu ano -
Proto se může kombinovat s neměnnými (immutable) objekty, u nichž se vnitřek nemění
Příklad final
objektová proměnná
final int i = 1;
i = 2; // cannot be done
final Person p = new Person("Honza");
p = new Person("Pavel"); // cannot be done
p.setName("Pavel"); // dirty hack