12. Balíky (packages)
Balíky (packages) slouží k vytváření nových prostorů
jmen (namespaces) (1) a umožňují tak 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 a rozhraní
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 a/nebo rozhraní. K tomu slouží klíčové slovo import:
import úplnéJménoTřídyNeboRozhraní ;
| 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 a rozhraní 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 (například 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 a rozhraní
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).
Jména balíků začínajících na java jsou rezervována a nedoporučuje se
jich používat pro vlastní účely. Například internetové prohlížeče z
bezpečnostních důvodů nedovolují appletům stahovat třídy z těchto balíků
z jiného, než lokálního počítače.
12.3. Java Core API
Java Platforma definuje 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 matematický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 volání metod (Remote Method
Invocation - RMI).
- java.rmi.dgc - definuje rozhraní distribuovaného garbage
collectoru.
- 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 - definuje rozhraní 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 (vektor, zásobník, slovník, hašovací tabulka), třídu pro
generování náhodných čísel, manipulaci s textem a časovými formáty.
- java.util.zip - umožňuje práci s komprimovanými soubory formátu
ZIP a GZIP, generování kontrolních součtů a CRC32.
Referenční popis těchto balíků a další dokumentaci obsahuje
[JDK97].
|