Pakiety klas - prosty przykład
Założenia:
Zakładamy, że tworzymy nowy program. W nowym programie chcemy skorzystać z klas, które zostały już utworzone wcześniej i są dostępne w określonych pakietach.
Plik nowego programu to Zoo.java i dla niego tworzymy specjalny katalog program01. Zakładamy, że mamy do dyspozycji utworzone już pakiety package_zoo01.animals.reptiles oraz package_zoo01.animals.birds, w których dostępne są odpowiednio klasy Snake oraz Bird. W programie Zoo.java chcemy użyć tych klas.
Przyjmujemy, że muszą istnieć następujące katalogi:
- katalog roboczy (bieżący katalog w konsoli / terminalu) - dalej określany jako <TWÓJ_KATALOG_ROBOCZY> - np.: c:\users\studentwsb\java
- katalog ze źródłowym kodem klas w języku Java:
<TWÓJ_KATALOG_ROBOCZY>\src (np.: c:\users\studentwsb\java\src)
- w tym katalogu z kodem źródłowym są dwa podkatalogi:
- katalog pakietu package_zoo01.animals.reptiles, w którym znajduje się plik klasy Snake.java oraz
- katalog pakietu package_zoo01.animals.birds, w którym znajduje się plik klasy Parrot.java;
- w tym katalogu z kodem źródłowym jest też katalog pakietu program01, w którym znajduje się plik programu - klasy Zoo.java testującej użycie pakietów package_zoo01.animals.reptiles oraz package_zoo01.animals.birds.
- w tym katalogu z kodem źródłowym są dwa podkatalogi:
- katalog wyjściowy, w którym mają znaleźć się wszystkie skompilowane pliki .class: <TWÓJ_KATALOG_ROBOCZY>\out (np.: c:\users\studentwsb\java\out); pliki .class mają zostać umieszczone w odpowiednich podkatalogach.
1. Utwórz katalog out - czyli katalog <TWÓJ_KATALOG_ROBOCZY>\out (np.: c:\users\studentwsb\java\out).
2. Utwórz katalog src oraz całą opisaną wyżej strukturę katalogów. Utwórz także wszystkie opisane wyżej pliki - każdy z rozszerzeniem .java.
3. Do odpowiednich pików wklej dostępny niżej kod.
Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\package_zoo01\animals\reptiles\Snake.java - czyli klasy w pakiecie package_zoo01.animals.reptiles:
package package_zoo01.animals.reptiles;
public class Snake {
public Snake() { // jedyna metoda - konstruktor bez parametru
System.out.println( "Snake CREATED" );
}
}
Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\package_zoo01\animals\birds\Parrot.java - czyli klasy w pakiecie package_zoo01.animals.birds:
package package_zoo01.animals.birds;
public class Parrot {
public Parrot() { // jedyna metoda - konstruktor bez parametru
System.out.println( "Parrot CREATED" );
}
}
Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\program01\Zoo.java - czyli klasy w pakiecie program01
package program01;
import package_zoo01.animals.reptiles.*; // Tutaj importujemy m.in. klasę Snake
import package_zoo01.animals.birds.*; // Tutaj importujemy m.in. klasę Parrot
public class Zoo {
public static void main( String[] args ) {
Snake snake = new Snake(); // utwórz obiekt klasy Snake
Parrot parrot = new Parrot(); // utwórz obiekt klasy Parrot
}
}
Uwaga: w tym momencie, aby możliwe było wykonanie kompilacji, musi istnieć katalog out - czyli katalog <TWÓJ_KATALOG_ROBOCZY>\out (np.: c:\users\studentwsb\java\out).
Aby skompilować cały nasz "systemik" testujący korzystanie z pakietów, upewnij się, że w konsoli wiersza poleceń jesteś w katalogu <TWÓJ_KATALOG_ROBOCZY> (np. c:\users\studentwsb\java) i użyj następującego polecenia:
javac -d out -cp src src/program01/Zoo.java
Zauważ, że została użyta opcja -cp src - czyli jako wartość opcji -cp został użyty katalog, w którym znajdują się pakiety package_zoo01.animals.reptiles oraz package_zoo01.animals.birds, a w nich odpowiednio źródłowe pliki .java każdej z klas w danym pakiecie. Kompilator przekształca te pliki w pliki .class i umieszcza pliki klas w odpowiedniej strukturze podkatalogów w katalogu określonym przy użyciu opcji -d out.
W efekcie uzyskujemy następujące pliki:
- <TWÓJ_KATALOG_ROBOCZY>\out\package_zoo01\animals\reptiles\Snake.class
- <TWÓJ_KATALOG_ROBOCZY>\out\package_zoo01\animals\birds\Parrot.class
- <TWÓJ_KATALOG_ROBOCZY>\out\program01\Zoo.class
Teraz należy uruchomić klasę program01.Zoo przy użyciu narzędzia java. Jako wartość CLASSPATH należy podać katalog out:
java -cp out program01.Zoo
Po uruchomieniu programu zobaczycie następujący wynik:
...$ java -cp out program01.Zoo
Snake CREATED
Parrot CREATED
...$
ĆWICZENIE
Przekształć istniejącą strukturę tak, aby zasymulować tworzenie nowego programu Zoo.java w pakiecie zoo. Skompiluj i uruchom...
ROZWIĄZANIE
1. Zmień nazwę katalogu package_zoo01 na zoo.
2. Skopiuj plik Zoo.java do katalogu zoo.
3. Już możesz usunąć katalog program01.
4. Zmień nazwę pakietu w pliku Zoo.java na zoo.
5. W pliku Zoo.java zmień nazwy importowanych pakietów na: zoo.animals.birds.*; oraz zoo.animals.reptiles.*;
6. W plikach Snake.java oraz Parrot.java zmień nazwy pakietów odpowiednio na: zoo.animals.reptiles oraz zoo.animals.birds
Do skompilowania użyj polecenia:
javac -d out -cp src src/zoo/Zoo.java
4. Uruchom za pomocą polecenia:
java -cp out zoo.Zoo
KOMPLETNA FORMA OSTATECZNEJ WERSJI PROGRAMU:
Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\zoo\animals\reptiles\Snake.java - czyli klasy w pakiecie zoo.animals.reptiles:
package zoo.animals.reptiles;
public class Snake {
public Snake() { // jedyna metoda - konstruktor bez parametru
System.out.println( "Snake CREATED" );
}
}
Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\zoo\animals\birds\Parrot.java - czyli klasy w pakiecie zoo.animals.birds:
package zoo.animals.birds;
public class Parrot {
public Parrot() { // jedyna metoda - konstruktor bez parametru
System.out.println( "Parrot CREATED" );
}
}
Oto treść pliku <TWÓJ_KATALOG_ROBOCZY>\src\zoo\Zoo.java - czyli klasy w pakiecie zoo
package zoo;
import zoo.animals.reptiles.*; // Tutaj importujemy m.in. klasę Snake
import zoo.animals.birds.*; // Tutaj importujemy m.in. klasę Parrot
public class Zoo {
public static void main( String[] args ) {
Snake snake = new Snake(); // utwórz obiekt klasy Snake
Parrot parrot = new Parrot(); // utwórz obiekt klasy Parrot
}
}