Pakiety w Javie to mechanizm hermetyzujący grupę klas podpakietów i interfejsów. Pakiety służą do:
- Zapobiegaj konfliktom nazewnictwa, zezwalając na istnienie klas o tej samej nazwie w różnych pakietach, takich jak college.staff.cse.Employee i college.staff.ee.Employee.
 - Ułatw organizowanie lokalizowania i używania interfejsów klas i innych komponentów.
 - Zapewnij kontrolowany dostęp członkom chronionym, którzy są dostępni w ramach tego samego pakietu i według podklas. Domyślne elementy członkowskie (bez specyfikatora dostępu) są dostępne tylko w ramach tego samego pakietu.
 
Grupując powiązane klasy w pakiety, Java promuje enkapsulację danych, dzięki czemu kod można ponownie wykorzystać i łatwiej nim zarządzać. Po prostu zaimportuj żądaną klasę z pakietu, aby użyć jej w swoim programie.
Tworzenie niestandardowych pakietów
Krok 1: Utwórz katalog, w którym tworzymy nasze pakiety i pliki Java.
mkdir PROGRAMOWANIE
Pełna forma iskconu
Krok 2: Teraz zmień katalog i utwórz kolejny folder w folderze głównym
PROGRAMOWANIE CD
mkdir Programowanie Java
cd Programowanie w Javie
tablice mkdir
Krok 3: Teraz utwórz pusty plik tekstowy i napisz poniższy kod Java i nie zapomnij zapisać go pod tą samą nazwą, co klasa z rozszerzeniem .java (TwoPointers.java)
Klasa TwoPointers.
Java
package JavaProgramming.arrays; // Main class present inside the package  public class TwoPointers {  public static void main(String[] args) {  System.out.println('Inside the package');  } } 
   
    Notatka:   Nie zapomnij dodać nazwy pakietu w pliku programu.
Krok 4: Teraz uruchom program ze zdefiniowaną ścieżką folderu
javac srcJavaProgrammingarraysTwoPointers.java
java srcJavaProgrammingarraysTwoPointers.java
Wyjście:
Uruchamiany program ze ścieżką folderuStruktura folderów:
To jest wizualna reprezentacja niestandardowego pakietu w Javie na poniższym obrazku. Najpierw tworzymy folder o nazwie Progaming i w nim tworzymy pakiet Javaprogramming, a następnie tworzymy kolejny podpakiet o nazwie tablice . Następnie tworzymy w nim plik klasy Java, który pokazano na obrazku poniżej:
Struktura folderówDziałanie pakietów Java
Struktura katalogów: Nazwy pakietów i struktury katalogów są ze sobą ściśle powiązane. Na przykład, jeśli nazwa pakietu to college.staff.cse, wówczas trzy katalogi to pracownicy uczelni, a cse, gdzie cse to personel, a personel to uczelnia.
Konwencje nazewnictwa : Nazwy pakietów są zapisywane w odwrotnej kolejności niż nazwy domen, np. org.geeksforgeeks.practice. Na studiach konwencja może wyglądać następująco:
- college.tech.cse
 - college.tech.ee
 - uczelnia.historia.sztuki
 
Przykład:
importuj java.util.*;
Tutaj util jest podpakietem utworzonym w pakiecie Java.
Dostęp do klas wewnątrz pakietu
W Javie możemy importować klasy z pakietu przy użyciu jednej z następujących metod:
usuwanie ostatniego zatwierdzenia gi
1. Zaimportuj konkretną klasę :
importuj java.util.Vector;
Spowoduje to zaimportowanie tylko klasy Vector z pakietu java.util.
2. Zaimportuj wszystkie klasy z pakietu :
importuj java.util.*;
Spowoduje to zaimportowanie wszystkich klas i interfejsów z pakietu java.util, ale nie obejmuje podpakietów.
Przykład: Zaimportuj klasę Vector
Javaimport java.util.Vector; public class Geeks {    public Geeks() {    // java.util.Vector is imported We are able to access it directly in our code.  Vector v = new Vector();    java.util.ArrayList l = new java.util.ArrayList();  l.add(3);  l.add(5);  l.add(7);    System.out.println(l);  }  public static void main(String[] args) {      new Geeks();  } } 
   Wyjście
[3 5 7]
Notatka:
- Korzystanie z pakietu importu.*; importuje wszystkie klasy w pakiecie, ale nie klasy z jego podpakietów.
 - Jeśli dwa pakiety mają klasy o tej samej nazwie (np. java.util.Date i my.package.Date), użyj pełnej nazwy, aby uniknąć konfliktów:
 
importuj java.util.Date;
zaimportuj moją.pakiet.Datę;
Rodzaje pakietów Java
- Wbudowane pakiety
 - Pakiety zdefiniowane przez użytkownika
 
1. Wbudowane pakiety
Pakiety te składają się z dużej liczby klas będących częścią Java API .Niektóre z powszechnie używanych wbudowanych pakietów to:
program macierzowy w języku c
- java.lang : Zawiera klasy obsługujące język (np. klasy definiujące operacje matematyczne na podstawowych typach danych). Ten pakiet jest importowany automatycznie.
 - Java.io: Zawiera klasy obsługujące operacje wejścia/wyjścia.
 - java.util : Zawiera klasy narzędzi, które implementują struktury danych, takie jak słownik list połączonych i obsługują; dla operacji na dacie/godzinie.
 - java.applet: Zawiera klasy do tworzenia apletów.
 - java.au: Zawierają klasy do implementacji komponentów graficznych interfejsów użytkownika (takich jak przyciski, menu itp.). 6)
 - Java.net: Zawierają klasy wspierające operacje sieciowe.
 
2. Pakiety zdefiniowane przez użytkownika
Są to pakiety definiowane przez użytkownika.
1. Utwórz pakiet:
Najpierw tworzymy katalog myPackage (nazwa powinna być taka sama jak nazwa pakietu). Następnie utwórz MyClass w katalogu, w którym pierwszą instrukcją będą nazwy pakietów.
Przykład:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. Użyj klasy w programie:   
Teraz skorzystamy z MojaKlasa zajęcia w naszym programie.
Java import myPackage.MyClass; public class Geeks {  public static void main(String args[]) {     // Initializing the String variable with a value   String s = 'GeeksforGeeks';    // Creating an instance of class MyClass in the package.  MyClass o = new MyClass();    o.getNames(s);  } } 
   
    Notatka:   Plik MyClass.java musi zostać zapisany w katalogu myPackage, ponieważ jest częścią pakietu.  
Import statyczny w Javie
Statyczny import w Javie polega na uproszczeniu dostępu do statycznych elementów i oddziela go od szerszej dyskusji na temat pakietów zdefiniowanych przez użytkownika.
Import statyczny to funkcja wprowadzona w języku programowania Java (wersja 5 i nowsze), która umożliwia członkom (polom i metodom) zdefiniowanym w klasie jako publiczne statyczny do użycia w kodzie Java bez określania klasy, w której zdefiniowano pole.
Przykład:
Javaimport static java.lang.System.*; class Geeks {  public static void main(String args[]) {    // We don't need to use 'System.out' as imported using static.  out.println('GeeksforGeeks');  } } 
   Wyjście
GeeksforGeeks
Obsługa konfliktów nazw
Jeśli dwa pakiety zawierają klasę o tej samej nazwie (np. java.util.Date i java.sql.Date), podaj pełną nazwę pakietu, aby uniknąć konfliktów.
importuj java.util.*;
importuj java.sql.*;
//Następnie użyj klasy Date, a wtedy otrzymamy błąd kompilacji:
Data dzisiaj ; //BŁĄD-- java.util.Date lub java.sql.Date?
Kompilator nie będzie w stanie określić, której klasy Date potrzebujemy. Ten problem można rozwiązać za pomocą określonej instrukcji importu:
importuj java.util.Date;
importuj java.sql.*;
Jeśli potrzebujemy obu klas Date, to za każdym razem, gdy deklarujemy nowy obiekt tej klasy, musimy użyć pełnej nazwy pakietu. Na przykład:
java.util.Date deadLine = nowa java.util.Date();
Java.sql.Date dzisiaj = nowa Java.sql.Date();zestaw c++
Struktura katalogów i ŚCIEŻKA KLASY
Nazwy pakietów odpowiadają strukturze katalogów. Na przykład klasa Circle w pakiecie com.zzz.project1.subproject2 jest przechowywana jako:
$BASE_DIR/com/zzz/project1/subproject2/Circle.class
- Tutaj $BASE_DIR reprezentuje katalog podstawowy pakietu.
 - „Kropka” w nazwie pakietu odpowiada podkatalogowi systemu plików.
 - Katalog podstawowy ( $BASE_DIR ) może znajdować się w dowolnym miejscu systemu plików.
 - Dlatego kompilator Java i środowisko wykonawcze muszą zostać poinformowane o lokalizacji $BASE_DIR, aby zlokalizować klasy.
 - Realizowane jest to poprzez zmienną środowiskową o nazwie ŚCIEŻKA KLASY .
 - CLASSPATH jest podobna do innej zmiennej środowiskowej PATH, która jest używana przez powłokę poleceń do wyszukiwania programów wykonywalnych.
 
Ustawianie CLASSPATH
CLASSPATH można ustawić w jeden z następujących sposobów:
- CLASSPATH można ustawić na stałe w środowisku kroków w systemie Windows
 
Przejdź do Panelu sterowania -> System -> Zaawansowane -> Zmienne środowiskowe.
- Wybierz „Zmienne systemowe”, aby zastosować ścieżkę CLASSPATH dla wszystkich użytkowników w systemie.
 - Wybierz opcję „Zmienne użytkownika”, aby zastosować je tylko dla aktualnie zalogowanego użytkownika.
 - Edytuj lub utwórz CLASSPATH: Jeśli CLASSPATH już istnieje, wybierz ją i kliknij „Edytuj” lub jeśli nie istnieje, kliknij „Nowy”
 - Wprowadź szczegóły CLASSPATH: W polu „Nazwa zmiennej” wpisz: „CLASSPATH” W polu „Wartość zmiennej” wprowadź katalogi i pliki JAR oddzielone średnikami.
 - W polu „Wartość zmiennej” wprowadź katalogi i pliki JAR oddzielone średnikami. Przykład:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- Kropka (
.) reprezentuje bieżący katalog roboczy. - Aby sprawdzić bieżące ustawienie CLASSPATH, wydaj następujące polecenie:
 
> USTAW ŚCIEŻKĘ KLASY
CLASSPATH można ustawić tymczasowo dla tej konkretnej sesji powłoki CMD, wydając następujące polecenie:
> USTAW ŚCIEŻKĘ KLASY=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar
Zamiast używać zmiennej środowiskowej CLASSPATH, możesz także użyć opcji wiersza poleceń -classpath lub -cp poleceń javac i java
> java – ścieżka klasy c:javaprojectclasses com.abc.project1.subproject2.MyClass3
Ilustracja pakietów zdefiniowanych przez użytkownika: Tworzenie naszego pierwszego pakietu: Nazwa pliku – ClassOne.java
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 Tworzenie naszego drugiego pakietu: Nazwa pliku – ClassTwo.java
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 Wykorzystanie obu utworzonych pakietów: Nazwa pliku – Testing.java
Javaimport package_name.ClassOne; import package_one.ClassTwo; public class Testing {  public static void main(String[] args)  {  ClassTwo a = new ClassTwo();  ClassOne b = new ClassOne();  a.methodClassTwo();  b.methodClassOne();  } } 
 Teraz spójrz na strukturę katalogów obu pakietów i pliku klasy testowej:
  
Modyfikatory dostępu w kontekście pakietów
-     Publiczny:   Członkowie z
publicmodyfikator są dostępne z dowolnego miejsca, niezależnie od tego, czy klasa uzyskująca dostęp znajduje się w tym samym pakiecie, czy nie . - Chroniony: Elementy członkowskie z chronionym modyfikatorem są dostępne w ramach tego samego pakietu w podklasach
 - Domyślny: Elementy członkowskie bez modyfikatora są dostępne tylko w ramach tego samego pakietu
 -     Prywatny:   Członkowie z
privatemodyfikator są dostępne tylko w obrębie tej samej klasy. Nie mogą uzyskać do nich dostępu klasy z podklas tego samego pakietu lub z różnych pakietów.