12. Balíky (packages)
Balíky (packages) jsou slouží k vytváření nových prostorů jmen (namespaces) (1) a umožňují
například vytváření knihovnen tříd a rozhraní. (2) Každý balík je obvykle
reprezentován adresářem (3) , který obsahuje přeložené třídy (soubory .class).
Vnořováním adresářů vzniká hierarchie balíků.
Část hierarchie standardního Java Core API vypadá takto:
java
|
+--- applet
+--- awt
| |
| +--- event
| +--- datatransfer
+--- io
+--- lang
+--- net
+--- ...
Jména adresářů odpovídají jménům balíků. Pro přístup ke třídám,
statickým metodám a členským proměnným se v balících používá tečkové
notace:
jménoBalíku.jménoTřídy
jménoBalíku.jménoTřídy.jménoMetody ( parametry )
jménoBalíku.jménoTřídy.jménoProměnné
Složená jména se oddělují tečkou (místo lomítek u adresářů). Jméno
včetně balíku specifikuje úplné jméno (fully qualified name).
Priklad 12.1. |
Soubor Thread.class je uložen v adresáři java/lang. (4) Úplné
jméno třídy Thread je java.lang.Thread. Úplné jméno statické
metody currentThread() obsažené v této třídě je java.lang.Thread.currentThread(). |
|
Cestu k balíkům udává systémová proměnná CLASSPATH Ta standardně
obsahuje pouze cestu k balíkům Java Core API a aktuálnímu adresáři.
Změna nastavení CLASSPATH viz D.1..
12.1. Import tříd
Protože psaní úplných jmen v programu je zdlouhavé, umožňuje Java používat
neúplná (jednoduchá) jména (simple names). Na začátku
zdrojového souboru je potřeba rozšířit rozsah platnosti identifikátorů na
požadované třídy. K tomu slouží klíčové slovo import:
import úplnéJménoTřídy ;
Priklad 12.2. |
Po importu:
import java.awt.Toolkit;
je možné volat statickou metodu:
java.awt.Toolkit.getDefaultToolkit();
rovněž jen jako:
Toolkit.getDefaultTooklit();
|
|
Importu více tříd jedním příkazem se docílí pomocí znaku "*" - tzv. import na žádost (import on demand):
import jménoBalíku.*;
Pokud by však docházelo ke kolizi jmen (dvě stejně pojmenované třídy
v různých balících), je třeba pro rozlišení použít úplná jména, jinak
ohlásí překladač chybu.
Priklad 12.3. |
Importu všech potřebných tříd a rozhraní z balíku java.applet
se dosáhne pomocí:
import java.applet.*;
|
|
V každém zdrojovém textu je automaticky proveden import všech tříd z balíku
java.lang (viz 12.3.).
12.2. Vytváření balíků
Java umožňuje programátorovi vytvářet vlastní balíky. Na začátku zdrojového
souboru je pouze třeba uvést:
package jménoBalíku ;
a zajistit umístění přeloženého souboru do adresáře jménoBalíku.
Priklad 12.4. |
Soubor Tetris.java obsahující zdrojový text:
package game;
public class Tetris {
// ...
}
musí být přeložen do adresáře game.
|
|
Je třeba zdůraznit, že všechny třídy, u kterých není specifikován balík,
patří automaticky do jednoho(!) implicitního balíku (default
package).
12.3. Java Core API
Java Platforma obsahuje standardní aplikační rozhraní, tzv. Java Core
API, (5) přičemž
počet obsažených balíků (a tříd) s každou major nebo
minor verzí (viz 4.1.1.) roste. Zde je přehled balíků
z Java Core API v JDK 1.1:
- java.applet - umožňuje tvorbu appletů, přehrávání zvuků
a poskytuje přístup k některým funkcím internetového prohlížeče.
- java.awt - obsahuje komponenty grafického uživatelského rozhraní
(GUI) jako jsou okna, dialogy, menu, popisky, tlačítka, textová pole atd.
- java.awt.datatransfer - obsahuje podporu pro práci se schránkou
(clipboardem).
- java.awt.event - definuje rozhraní a třídy pro zpracování
událostí, podrobněji viz. A.2..
- java.awt.image - umožňuje manipulaci s obrázky (ve spolupráci
s třídou java.awt.Image).
- java.beans - definuje rozhraní a třídy pro vytváření komponent
podle standardu JavaBeans používaných v prostředích vizuálního
programování.
- java.io - obsahuje třídy pro práci s datovými proudy, viz
kap. 15..
- java.lang - obsahuje základní třídy runtime systému
(Object, Thread, Compiler, Process, Runtime,
Class, ClassLoader, SecurityManager, Throwable),
třídu matemackých funkcí (Math) a třídy obalující primitivní datové
typy (String, Void, Byte atd.).
- java.lang.reflect - obsahuje třídy pro introspekci, tj.
zjišťování informací o třídách a objektech.
- java.math - balík pro matematické výpočty s libovolnou přesností
v celých (třída BigInteger) a desetinných číslech (třída BigDecimal).
- java.net - umožňuje síťovou komunikaci prostřednictvím socketů (protokol TCP/IP).
- java.rmi - obsahuje prostředky pro vývoj distribuovaných
programů pomocí vzdáleného spouštění metod (Remote Method
Invocation - RMI).
- java.rmi.dgc - implementuje distribuovaný garbage collector.
- java.rmi.registry - poskytuje registr vzdálených objektů.
- java.rmi.server - obsahuje podporu serverové strany RMI.
- java.security - obsahuje obecné třídy a rozhraní pro manipulaci
s veřejnými a privátními klíči, digitálními podpisy, certifikáty atd.
- java.security.acl - datové struktury pro kontrolovaný přístup
k prostředkům (resources).
- java.security.interfaces - poskytuje rozhraní pro generování
klíčů podle RSA (asymetrická šifra) a DSA (digitální podpisy).
- java.sql - umožňuje připojení a práci s SQL databázemi pomocí
ovladačů JDBC (Java DataBase Connectivity).
- java.text - umožňuje práci s textem (formátování, parsing atd.)
- java.util - obsahuje pomocné třídy několika základních
programových struktur (zásobník, slovník, hašovací tabulka), generování
náhodných čísel a manipulaci s řetězci.
- java.util.zip - umožňuje práci s komprimovanými soubory formátu
ZIP a GZIP, generováí kontrolních součtů a CRC32.
Referenční popis těchto balíků a další dokumentaci obsahuje
[JDK97].
|