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.

  • 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íň.

Definice konstanty

  • Konstanty jsou vždy:

    • statické (static) — stačí nám jedna pro celou třídu

    • neměnné (final) — je to konstanta, tudíž pomocí final zajistíme neměnnost

  • Konstanta může být:

    • privátní (dobře možné, když ji nechceme používat mimo třídu)

    • veřejná (nicméně asi obvyklejší, většinou má širší použití)

Příklad konstanty

  • Obvykle se nastavuje takto přímo přiřazením hodnoty

public static final int MAX_PEOPLE_COUNT = 100;
public boolean maxPeopleCountReached() {
  return peopleCount >= MAX_PEOPLE_COUNT;
}
...
int constant = Person.MAX_PEOPLE_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
Konstanty mají kromě slova final i slovo static protože ji chceme právě jednou.