Pakiety

Program w języku Java to – w pewnym uproszczeniu – zbiór klas. Nie jest to jednak zbiór bezładny. Klasy pogrupowane są w tzw. pakiety. Klasy dzielimy na pakiety by pogrupować je według ich znaczenia – analogicznie do tego, jak dzielimy pliki na katalogi na dysku twardym naszego komputera.

Pakiety – podobnie jak katalogi – mają strukturę hierarchiczną, tj. każdy z pakietów może zawierać kolejne pakiety – podobnie jak katalogi mogą zawierać podkatalogi. Każdy pakiet, oprócz dowolnej liczby innych pakietów może zawierać także dowolną liczbę klas – podobnie do katalogu, który oprócz innych katalogów może zawierać dowolnie wiele plików. O klasach które nie należą do żadnego pakietu (mówi się o nich czasem, że należą do pakietu domyślnego lub głównego) możemy myśleć jak o plikach które znajdują się bezpośrednio na dysku C naszego komputera – one również nie należą do żadnego katalogu.

Nazwy pakietów zwyczajowo pisze się małymi literami. Kolejne poziomy zagnieżdżenia w hierarchii pakietów oddziela się od siebie kropkami, podobnie do tego jak nazwy kolejnych katalogów w ścieżce dostępu oddziela się od siebie ukośnikami.

Wiemy już, że jeśli implementujemy klasę, to musimy jej kod źródłowy umieścić w osobnym pliku, który to plik nazywa się dokładnie tak samo jak ta klasa i posiada rozszerzenie java. Podobnie, jeśli deklarujemy, że klasa należy do pewnego pakietu, to plik zawierający implementację tej klasy musi znajdować się w katalogu odpowiadającym temu pakietowi.

Przykładowo, jeśli plik zawierający definicję klasy HelloWorld znajduje się w katalogu o nazwie naukajavy, który to katalog z kolei znajduje się w katalogu o nazwie pl, tj. plik o nazwie HelloWorld.java znajduje się w katalogu pl/naukajavy, to klasa ta należy do pakietu pl.naukajavy.Implementując klasę musimy określić w jakim znajduje się ona pakiecie. W tym celu, na samym początku pliku umieszczamy instrukcję:

package {nazwa pakietu};

gdzie zamiast ciągu {nazwa pakietu} wpisujemy nazwę pakietu. Przykładowo, implementacja klasy HelloWorld z pakietu pl.naukajavy, tj. klasy pl.naukajavy.HelloWorld wygląda następująco:

package pl.naukajavy;

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}

Kod ten naturalnie umieszczamy w pliku pl/naukajavy/HelloWorld.java. Jeśli klasę umieszczamy w pakiecie domyślnym (tj. poza jakimkolwiek pakietem), to deklarację pakietu w pliku – tj. instrukcję package – pomijamy.