Pliki źródłowe i pakiety

Ziomal

Program języka Java może się składać z wielu niezależnie kompilowalnych modułów źródłowych, w których umieszcza się definicje klas oraz interfejsów. Moduły źródłowe są przechowywane w plikach o nazwie Nazwa.java, gdzie Nazwa jest nazwą klasy publicznej; pliki te stanowią jednostki kompilacji. Jeżeli w pliku Nazwa.java zdefiniowano tylko jedną klasę, to w wyniku kompilacji tego pliku powstaje plik wynikowy Nazwa.class. Jeżeli program jest aplikacją, to w zestawie modułów źródłowych musi się znaleźć dokładnie jeden moduł źródłowy (moduł główny aplikacji) z klasą publiczną, która zawiera publiczną i statyczną funkcję main (każdy inny moduł źródłowy może zawierać klasę z funkcją main, jeżeli nie jest to klasa publiczna).

Moduł źródłowy, w którym definicje klas oraz interfejsów poprzedzono deklaracją pakietu o postaci package nazwa_pakietu; staje się pakietem. Deklaracja pakietu rozszerza przestrzeń nazw programu i pozwala na lepsze zarządzanie programem wielomodułowym. Jeżeli moduł źródłowy nie zawiera deklaracji pakietu, to należy on do tzw. pakietu domyślnego (pakietu bez nazwy). Np. zadeklarowana wcześniej klasa Hello, umieszczona w pliku Hello.java należy do pakietu domyślnego.
Pakiety są ściśle powiązane z katalogami, w których umieszcza się moduły źródłowe i pliki wynikowe.

Załóżmy np., że w katalogu mike\myprog\pakiet1 (Win95 DOS) umieszczono główny plik źródłowy aplikacji Student.java o postaci:

package mike.myprog.pakiet1;
import mike.myprog.pakiet1.Grade;
public
class Student {
    int i = 10;
    public static void main(String args[])
    {
     System.out.println("Hello, I am here!");
     Grade mygrade = new Grade();
     mygrade.printgrade();
    }
}

Plik zawiera definicję klasy Student, poprzedzoną deklaracją pakietu oraz deklaracją importu klasy Grade. Plik ten może zostać skompilowany (wywołaniem kompilatora javac z katalogu nadrzędnego w stosunku do katalogu mike: javac mike\myprog\pakiet1\Student.java).
Jeżeli np. plik Grade.java ma postać:

package mike.myprog.pakiet1;
class Grade {
    int i = 10;
    public void printgrade()
    {
     System.out.println("My grades are higher than " + i);
    }
}
class Empty {}

to zostaną utworzone dwa pliki wynikowe: Student.class i Grade.class, a wywołanie interpretatora java mike\myprog\pakiet1\Student spowoduje wyprowadzenie na ekran napisu:

Hello, I am here!
My grades are higher than 10
Uwaga. Deklaracja importu nie oznacza włączania do pliku Student.java tekstu zawartego w pliku Grade.java. Natomiast pozwala ona użytkownikowi klasy Student używać skrótowych nazw: np. zamiast pisać mike\myprog\pakiet1\Grade mygrade = new mike\myprog\pakiet1\Grade(); mogliśmy napisać krótko Grade mygrade = new Grade();. Gdybyśmy chcieli używać również klasy Empty, to deklaracja importu miałaby postać: import mike.myprog.pakiet1.*. W języku Java ważna jest także kolejność deklaracji: najpierw deklaracja pakietu, po niej deklaracje importu, po czym definicje klas.

Autor Dariusz Frankowski

Artykuł pochodzi z magazynu komputerowego @T.
Darmową prenumeratę możesz złożyć na [url]www.at.w.pl[/url]

3 komentarzy

Z pliku źródłowego Grade.java powstaną 2 pliki wynikowe:Grade.class i Empty.class a nie Student.class - tak gwoli ścisłosci:-)