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.
Javapackage 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.