Java - pakiety
Pakiety są używane w Javie w celu zapobiegania konfliktom nazw, kontroli dostępu, ułatwienia wyszukiwania / lokalizowania i używania klas, interfejsów, wyliczeń i adnotacji itp.
ZA Package można zdefiniować jako grupę powiązanych typów (klas, interfejsów, wyliczeń i adnotacji) zapewniających ochronę dostępu i zarządzanie przestrzenią nazw.
Niektóre z istniejących pakietów w Javie to -
java.lang - zawiera podstawowe klasy
java.io - klasy dla wejścia, funkcje wyjściowe są zawarte w tym pakiecie
Programiści mogą definiować własne pakiety w celu spakowania grup klas / interfejsów itp. Dobrą praktyką jest grupowanie zaimplementowanych przez Ciebie powiązanych klas, tak aby programista mógł łatwo określić, czy klasy, interfejsy, wyliczenia i adnotacje są powiązane.
Ponieważ pakiet tworzy nową przestrzeń nazw, nie będzie żadnych konfliktów nazw z nazwami w innych pakietach. Korzystając z pakietów, łatwiej jest zapewnić kontrolę dostępu, a także łatwiej jest zlokalizować powiązane klasy.
Tworzenie pakietu
Tworząc pakiet, należy wybrać nazwę pakietu i dołączyć plik package wraz z tą nazwą u góry każdego pliku źródłowego, który zawiera klasy, interfejsy, wyliczenia i typy adnotacji, które chcesz dołączyć do pakietu.
Instrukcja pakietu powinna być pierwszym wierszem w pliku źródłowym. W każdym pliku źródłowym może znajdować się tylko jedna instrukcja pakietu i ma ona zastosowanie do wszystkich typów w pliku.
Jeśli instrukcja pakietu nie jest używana, klasa, interfejsy, wyliczenia i typy adnotacji zostaną umieszczone w bieżącym pakiecie domyślnym.
Aby skompilować programy Java z instrukcjami pakietu, musisz użyć opcji -d, jak pokazano poniżej.
javac -d Destination_folder file_name.java
Następnie w określonym miejscu docelowym tworzony jest folder o podanej nazwie pakietu, a skompilowane pliki klas zostaną umieszczone w tym folderze.
Przykład
Spójrzmy na przykład, który tworzy pakiet o nazwie animals. Dobrą praktyką jest używanie nazw pakietów z małymi literami, aby uniknąć konfliktów z nazwami klas i interfejsów.
Poniższy przykład pakietu zawiera interfejs o nazwie animals -
/* File name : Animal.java */
package animals;
interface Animal {
public void eat();
public void travel();
}
Teraz zaimplementujmy powyższy interfejs w tym samym pakiecie animals -
package animals;
/* File name : MammalInt.java */
public class MammalInt implements Animal {
public void eat() {
System.out.println("Mammal eats");
}
public void travel() {
System.out.println("Mammal travels");
}
public int noOfLegs() {
return 0;
}
public static void main(String args[]) {
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}
Teraz skompiluj pliki java, jak pokazano poniżej -
$ javac -d . Animal.java
$ javac -d . MammalInt.java
Teraz pakiet / folder z nazwą animals zostaną utworzone w bieżącym katalogu i te pliki klas zostaną w nim umieszczone, jak pokazano poniżej.
Możesz uruchomić plik klasy w pakiecie i uzyskać wynik, jak pokazano poniżej.
Mammal eats
Mammal travels
Import Keyword
Jeśli klasa chce użyć innej klasy w tym samym pakiecie, nie trzeba używać nazwy pakietu. Klasy z tego samego pakietu znajdują się nawzajem bez żadnej specjalnej składni.
Przykład
W tym przypadku klasa o nazwie Boss jest dodawana do pakietu listy płac, który zawiera już pracownika. Szef może wtedy odwołać się do klasy Pracownik bez używania przedrostka listy płac, jak pokazano na poniższej klasie Szef.
package payroll;
public class Boss {
public void payEmployee(Employee e) {
e.mailCheck();
}
}
Co się stanie, jeśli klasa pracownika nie znajduje się w liście płac? Klasa Boss musi następnie używać jednej z następujących technik w celu odwoływania się do klasy w innym pakiecie.
- Można użyć w pełni kwalifikowanej nazwy klasy. Na przykład -
payroll.Employee
Pakiet można zaimportować za pomocą słowa kluczowego import i symbolu wieloznacznego (*). Na przykład -
import payroll.*;
- Samą klasę można zaimportować za pomocą słowa kluczowego import. Na przykład -
import payroll.Employee;
Note- Plik klasy może zawierać dowolną liczbę instrukcji importu. Instrukcje importu muszą znajdować się po instrukcji pakietu i przed deklaracją klasy.
Struktura katalogów pakietów
Dwa główne wyniki pojawiają się, gdy zajęcia są umieszczane w pakiecie -
Nazwa pakietu staje się częścią nazwy klasy, co omówiliśmy w poprzedniej sekcji.
Nazwa pakietu musi odpowiadać strukturze katalogów, w których znajduje się odpowiedni kod bajtowy.
Oto prosty sposób zarządzania plikami w Javie -
Umieść kod źródłowy klasy, interfejsu, wyliczenia lub typu adnotacji w pliku tekstowym, którego nazwa jest prostą nazwą typu i którego rozszerzenie to .java.
Na przykład -
// File Name : Car.java
package vehicle;
public class Car {
// Class implementation.
}
Teraz umieść plik źródłowy w katalogu, którego nazwa odzwierciedla nazwę pakietu, do którego należy klasa -
....\vehicle\Car.java
Teraz kwalifikowana nazwa klasy i nazwa ścieżki wyglądałyby następująco -
- Nazwa klasy → pojazd. Samochód
- Nazwa ścieżki → pojazd \ Car.java (w systemie Windows)
Ogólnie firma używa odwróconej nazwy domeny internetowej do nazw swoich pakietów.
Example- Nazwa domeny internetowej firmy to apple.com, wtedy wszystkie nazwy jej pakietów zaczynałyby się od com.apple. Każdy składnik nazwy pakietu odpowiada podkatalogowi.
Example - Firma miała pakiet komputerów com.apple.com, który zawierał plik źródłowy Dell.java, byłby on zawarty w szeregu podkatalogów takich jak ten -
....\com\apple\computers\Dell.java
W momencie kompilacji kompilator tworzy inny plik wyjściowy dla każdej zdefiniowanej w nim klasy, interfejsu i wyliczenia. Podstawową nazwą pliku wyjściowego jest nazwa typu, a jego rozszerzenie to.class.
Na przykład -
// File Name: Dell.java
package com.apple.computers;
public class Dell {
}
class Ups {
}
Teraz skompiluj ten plik w następujący sposób, używając opcji -d -
$javac -d . Dell.java
Pliki zostaną skompilowane w następujący sposób -
.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class
Możesz zaimportować wszystkie klasy lub interfejsy zdefiniowane w \ com \ apple \ computers \ w następujący sposób -
import com.apple.computers.*;
Podobnie jak pliki źródłowe .java, skompilowane pliki .class powinny znajdować się w szeregu katalogów odpowiadających nazwie pakietu. Jednak ścieżka do plików .class nie musi być taka sama, jak ścieżka do plików źródłowych .java. Możesz osobno uporządkować katalogi źródłowe i klasowe, ponieważ -
<path-one>\sources\com\apple\computers\Dell.java
<path-two>\classes\com\apple\computers\Dell.class
W ten sposób możliwe jest udostępnienie katalogu klas innym programistom bez ujawniania źródeł. Musisz także zarządzać plikami źródłowymi i klasami w ten sposób, aby kompilator i wirtualna maszyna języka Java (JVM) mogły znaleźć wszystkie typy używane przez program.
Pełna ścieżka do katalogu klas, <ścieżka-two> \ classes, nazywana jest ścieżką klasy i jest ustawiana za pomocą zmiennej systemowej CLASSPATH. Zarówno kompilator, jak i maszyna JVM tworzą ścieżkę do plików .class, dodając nazwę pakietu do ścieżki klasy.
Powiedzmy, że <ścieżka-two> \ classes to ścieżka klasy, a nazwa pakietu to com.apple.computers, a kompilator i maszyna JVM będą szukać plików .class w lokalizacji <path-two> \ classes \ com \ apple \ computers.
Ścieżka klasy może zawierać kilka ścieżek. Wiele ścieżek należy oddzielić średnikiem (Windows) lub dwukropkiem (Unix). Domyślnie kompilator i maszyna JVM przeszukują bieżący katalog i plik JAR zawierający klasy platformy Java, tak aby katalogi te automatycznie znalazły się w ścieżce klas.
Ustaw zmienną systemową CLASSPATH
Aby wyświetlić bieżącą zmienną CLASSPATH, użyj następujących poleceń w systemach Windows i UNIX (powłoka Bourne'a) -
- W systemie Windows → C: \> ustaw CLASSPATH
- W systemie UNIX →% echo $ CLASSPATH
Aby usunąć bieżącą zawartość zmiennej CLASSPATH, użyj -
- W systemie Windows → C: \> ustaw CLASSPATH =
- W UNIX →% unset CLASSPATH; eksportuj CLASSPATH
Aby ustawić zmienną CLASSPATH -
- W systemie Windows → ustaw CLASSPATH = C: \ users \ jack \ java \ classes
- W systemie UNIX →% CLASSPATH = / home / jack / java / classes; eksportuj CLASSPATH