Naučte se Javu – statické proměnné a metody, balíčky
V tomto díle si povíme o tom, co jsou statické proměnné a statické metody, a dále o balíčcích, zajišťujících hierarchii tříd Javy.
Statické proměnné
Dosud jsme hovořili o nestatických proměnných (proměnné instance). Statické proměnné (proměnné třídy) na rozdíl od nich existují pouze jedenkrát pro celou třídu, a to i v případě, že neexistují žádné její instance. Nepopisují vlastnost objektů třídy, ale třídy jako takové. Příkladem pro třídu Osoba může být počet osob uchovávaných v programu nebo jejich seznam:
|
Pomocí statických proměnných se často obchází nepřítomnost globálních proměnných a konstant v Javě. Pokud statické proměnné přidáte modifikátor final, jedná se o konstantu.
Statické metody
Statické metody (metody třídy) mohou přistupovat pouze ke statickým proměnným a lze je volat i v případě, že neexistuje žádný objekt dané třídy:
|
Popis příkladu: Statická proměnná seznamOsob je typu Vector, což je struktura pro uchovávání libovolného počtu objektů. Metoda volnychOsob vrací počet volných míst pro osoby (maximální počet osob je omezen konstantou MAX_POČET a aktuální počet se zjišťuje metodou size objektu seznamOsob). Metoda novaOsoba založí nový objekt třídy Osoba a přidá ho do seznamu osob.
Kupříkladu matematické funkce jsou v Javě jako statické metody třídy java.lang.Math, matematické konstanty jsou jakoby statické proměnné této třídy:
|
Balíčky
Balíčky se používají pro seskupování souvisejících objektů a souvisí s oblastí jmen, o čemž si povíme později. Jméno třídy odpovídá jménu souboru, ve kterém je definována třída. Jméno balíčku odpovídá adresáři, kde je daná třída umístěna. Bude–li například naše třída Kruznice umístěna v balíčku grafika.tvary, bude umístěna v souboru grafika\tvary\kruznice.class (zdrojový kód v grafika\tvary\kruznice.java). Pokud chcete tuto třídu v jiné třídě využívat, musí být v systémové proměnné CLASSPATH definována cesta k adresáři balíčku (adresář obsahující podadresář grafika), a na třídu se odkazujete pomocí tečkové notace, jak ukazuje příklad:
|
Balíček třídy se definuje klíčovým slovem package umístěným jako první příkaz souboru. Příklad:
|
Pokud příkaz package neuvedete, je třída součástí nepojmenovaného standardního balíčku. To se hodí pro malé aplikace nebo pro testovací účely, jinak raději balíčky používejte.
Standardní třídy jazyka Java jsou umístěny v podbalíčcích balíčku java: java.lang, java.util, java.awt. V příkladu výše jsme se na objekt Vector z balíčku java.util udvolávali jako na java.util.Vector.
Příklad z prvního dílu:
Nyní již umíme přečíst následující volání (podobné příkladu z prvního dílu seriálu):
|
Balíček java.lang obsahuje třídu System, ta má statickou proměnnou out (reference na objekt typu java.io.PrintStream) a ta má metodu println. Proměnná out třídy System představuje standardní výstup programu a metoda println vypíše řádek, celkově toto volání vypíše zadaný řetězec na standardní výstup. Jelikož balíček java.lang je základní balíček Javy, lze jeho jméno vynechávat a používat tak zkrácený zápis (který byl popsán v prvním díle seriálu):
|
Na okraj uvádím, že Java rovněž umožňuje odkazovat se absolutně na třídy umístěné kdekoli na Internetu. K tomu se používá klasické doménové jméno. Předpokládejte, že chcete využívat třídu Circle umístěnou na serveru java.libraries.com v adresáři jirka/grafika (http://java.libraries.com/jirka/grafika/Circle.class). Kompletní jméno takové třídy by pak bylo COM.libraries.java.jirka.grafika.Circle.
Import balíčků
Abyste nemuseli pokaždé vypisovat kompletní dlouhá jména všech tříd a jejich balíčků, umožňuje Java pomocí příkazu import určit, které třídy (balíčky) budete používat, a poté psát pouze zkrácený zápis. Pokud například často využíváte třídu grafika.tvary.Kruznice, stačí napsat za příkaz package před definici třídy import grafika.tvary.Kruznice;, a potom se na třídu lze odkazovat jako na Kruznice. Pokud používáte hodně tříd z balíčku java.awt (java.awt.Button, java.awt.List, java.awt.Checkbox, …), můžete uvést příkaz import java.awt.*; a na třídy se odkazovat jen jako na Button, List, Checkbox…
Příklad třídy:
|






