Pakiet Java - Java package
Pakiet Java organizuje Java klas w przestrzeni nazw , zapewniając wyjątkową nazw dla każdego typu zawiera. Klasy w tym samym pakiecie mogą uzyskiwać dostęp do prywatnych i chronionych członków pakietu.
Ogólnie pakiet może zawierać następujące rodzaje typów : klasy, interfejsy , wyliczenia i typy adnotacji . Pakiet umożliwia programiście grupowanie klas (i interfejsów) razem. Wszystkie te klasy będą w jakiś sposób powiązane – wszystkie mogą mieć związek z konkretną aplikacją lub wykonaniem określonego zestawu zadań. Programiści również zazwyczaj używają pakietów do organizowania klas należących do tej samej kategorii lub zapewniających podobną funkcjonalność.
Korzystanie z pakietów
W pliku źródłowym Java pakiet, do którego należy klasa lub klasy tego pliku, jest określony za pomocą package
słowa kluczowego . To słowo kluczowe jest zwykle pierwszym słowem kluczowym w pliku źródłowym. W pliku źródłowym może pojawić się co najwyżej jedna deklaracja pakietu.
package java.awt.event;
Aby użyć klas pakietu w pliku źródłowym Java, wygodnie jest zaimportować klasy z pakietu wraz z import
deklaracją. Następująca deklaracja
import java.awt.event.*;
importuje wszystkie klasy z java.awt.event
pakietu, natomiast następna deklaracja
import java.awt.event.ActionEvent;
importuje tylko ActionEvent
klasę z pakietu. Po jednej z tych deklaracji importowych ActionEvent
można odwoływać się do klasy, używając jej prostej nazwy klasy:
ActionEvent myEvent = new ActionEvent();
Klas można również używać bezpośrednio bez deklaracji importu, używając w pełni kwalifikowanej nazwy klasy. Na przykład,
java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();
nie wymaga wcześniejszego zgłoszenia przywozowego.
Dokumentacja Javadoc dla całego pakietu i adnotacje
Dokumentacja wyjaśniająca pakiet jako całość jest napisana jako Javadoc w pliku o nazwie dokładnie `package-info.java`. Ten plik jest również miejscem na adnotacje, które mają być używane we wszystkich klasach pakietu. Zobacz Specyfikacja języka Java .
Nienazwany pakiet
Jeśli deklaracja pakietu nie jest używana, klasy są umieszczane w nienazwanym pakiecie. Klasy w nienazwanym pakiecie nie mogą być importowane przez klasy z żadnego innego pakietu. Oficjalny samouczek Java odradza to:
- Ogólnie rzecz biorąc, nienazwany pakiet jest przeznaczony tylko dla małych lub tymczasowych aplikacji lub gdy dopiero zaczynasz proces tworzenia. W przeciwnym razie klasy i interfejsy należą do nazwanych pakietów.
Ochrona dostępu do pakietu
Członkowie publiczni i klasy są widoczne wszędzie, a członkowie prywatni są widoczni tylko w tej samej klasie. Klasy w pakiecie mogą uzyskiwać dostęp do klas i członków zadeklarowanych z domyślnym dostępem ( package-private ), jak również do członków klas zadeklarowanych z protected
modyfikatorem dostępu. Domyślnie (pakiet-prywatne) dostęp jest egzekwowane kiedy klasa lub członek nie została zadeklarowana jako public
, protected
lub private
. Natomiast klasy w innych pakietach nie mają dostępu do klas i członków zadeklarowanych z dostępem domyślnym. Jednak członkowie klasy zadeklarowani jako protected
mogą być dostępni z klas w tym samym pakiecie, a także klas w innych pakietach, które są podklasami klasy deklarującej.
Tworzenie plików JAR
Pliki JAR są tworzone za pomocą narzędzia wiersza polecenia jar. Komenda
jar cf myPackage.jar *.class
kompresuje wszystkie pliki .class do pliku JAR myPackage.jar . Opcja „c” w wierszu poleceń mówi poleceniu jar, aby „utworzyło nowe archiwum”. Opcja „f” mówi mu, aby utworzyć plik. Nazwa pliku jest następna przed zawartością pliku JAR.
Konwencje nazewnictwa pakietów
Pakiety są zwykle definiowane przy użyciu hierarchicznego wzorca nazewnictwa , z niektórymi poziomami w hierarchii oddzielonymi kropkami ( .
, wymawiane jako „kropka”). Chociaż pakiety znajdujące się niżej w hierarchii nazewnictwa są często określane jako „podpakiety” odpowiednich pakietów znajdujących się wyżej w hierarchii, prawie nie ma związku semantycznego między pakietami. Specyfikacja języka Java ustanawia konwencje nazewnictwa pakietów, aby uniknąć możliwości, że dwa opublikowane pakiety będą miały tę samą nazwę. Konwencje nazewnictwa opisują sposób tworzenia unikalnych nazw pakietów, tak aby pakiety szeroko rozpowszechnione miały unikatowe przestrzenie nazw. Dzięki temu pakiety można oddzielnie, łatwo i automatycznie instalować oraz katalogować.
Ogólnie nazwa pakietu zaczyna się od nazwy domeny najwyższego poziomu organizacji, a następnie domeny organizacji, a następnie wszelkich subdomen, wymienionych w odwrotnej kolejności. Organizacja może wtedy wybrać konkretną nazwę dla swojego pakietu. Kolejne składniki nazwy pakietu różnią się w zależności od wewnętrznych konwencji nazewnictwa organizacji.
Na przykład, jeśli organizacja w Kanadzie o nazwie MySoft tworzy pakiet do obsługi frakcji, nazwanie pakietu ca.mysoft.fractions odróżnia pakiet frakcji od innego podobnego pakietu utworzonego przez inną firmę. Jeśli niemiecka firma o nazwie MySoft również tworzy pakiet frakcji, ale nazywa go de.mysoft.fractions , wówczas klasy w tych dwóch pakietach są zdefiniowane w unikalnej i oddzielnej przestrzeni nazw.
Pełne konwencje ujednoznaczniania nazw pakietów i zasady nazewnictwa pakietów, gdy nazwa domeny internetowej nie może być bezpośrednio użyta jako nazwa pakietu, są opisane w sekcji 7.7 specyfikacji języka Java.
Pakiety podstawowe w Java SE 8
java.lang | — podstawowa funkcjonalność języka i podstawowe typy |
java.util | — klas struktury kolekcji danych |
java.io | — operacje na plikach |
java.math | — arytmetyka wieloprecyzyjna |
java.nio | — Non-blocking I/O framework for Java |
java.net | — operacje sieciowe, gniazda, wyszukiwania DNS , ... |
java.security | — generowanie, szyfrowanie i deszyfrowanie kluczy |
java.sql | — Java Database Connectivity (JDBC) w celu uzyskania dostępu do baz danych |
java.awt | — podstawowa hierarchia pakietów dla natywnych komponentów GUI |
java.text | — Udostępnia klasy i interfejsy do obsługi tekstu, dat, liczb i komunikatów w sposób niezależny od języków naturalnych. |
java.rmi | — Zapewnia pakiet RMI. |
java.time | — Główny interfejs API dla dat, godzin, chwil i czasów trwania. |
java.beans | — Pakiet java.beans zawiera klasy i interfejsy związane z komponentami JavaBeans. |
java.aplet | — Ten pakiet zawiera klasy i metody do tworzenia apletów i komunikowania się z nimi. |
Pakiet java.lang jest dostępny bez użycia instrukcji import.
Moduły
W Javie 9 , "moduły", rodzaj zbioru pakietów, są planowane jako część Project Jigsaw; były one wcześniej nazywane „superpakietami” i pierwotnie planowane dla Javy 7.
Moduły opisują swoje zależności w deklaracji modułu, która zostanie umieszczona w pliku o nazwie module-info.java w katalogu głównym hierarchii plików źródłowych modułu. JDK będzie mógł je sprawdzić zarówno w czasie kompilacji, jak i w czasie wykonywania. Sam JDK zostanie zmodularyzowany dla Javy 9 .