Pachetele în Java sunt un mecanism care încapsulează un grup de sub-pachete și interfețe de clase. Pachetele sunt folosite pentru:
- Preveniți conflictele de denumire permițând claselor cu același nume să existe în pachete diferite, cum ar fi college.staff.cse.Employee și college.staff.ee.Employee.
 - Ușurează organizarea localizării și folosirii interfețelor claselor și a altor componente.
 - Oferiți acces controlat pentru membrii protejați care sunt accesibile în cadrul aceluiași pachet și pe subclase. Membrii impliciti (fără specificator de acces) sunt accesibili numai în cadrul aceluiași pachet.
 
Prin gruparea claselor înrudite în pachete, Java promovează încapsularea datelor, făcând codul reutilizabil și mai ușor de gestionat. Pur și simplu importați clasa dorită dintr-un pachet pentru a o utiliza în programul dvs.
Crearea pachetelor personalizate
Pasul 1: Creați un director în care ne creăm pachetele și fișierele Java.
PROGRAMARE mkdir
forma completă cdr
Pasul 2: Acum schimbați directorul și creați un alt folder în folderul principal
PROGRAMARE cd
mkdir JavaProgramming
cd JavaProgramming
matrice mkdir
Pasul 3: Acum creați un fișier text gol și scrieți codul Java de mai jos și nu uitați să-l salvați cu același nume ca și clasa cu extensia .java (TwoPointers.java)
Clasa 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');  } } 
   
    Nota:   Nu uitați să adăugați numele pachetului în fișierul programului.
Pasul 4: Acum rulați programul cu calea folderului definit
javac srcJavaProgrammingarraysTwoPointers.java
java srcJavaProgrammingarraysTwoPointers.java
Ieșire:
Rulează programul cu calea folderuluiStructura folderului:
Aceasta este reprezentarea vizuală a unui pachet personalizat în Java în imaginea de mai jos. Mai întâi creăm un folder numit Progamming și în interiorul lui creăm un pachet Javaprogramming și apoi creăm un alt subpachet care se numește matrice . Apoi creăm un fișier de clasă Java în interiorul acestuia, care este afișat în imaginea de mai jos:
Structura folderuluiFuncționarea pachetelor Java
Structura directorului: Numele pachetelor și structurile de directoare sunt strâns legate. De exemplu, dacă numele unui pachet este college.staff.cse, atunci trei directoare sunt personalul colegiului și cse unde cse este în interiorul personalului și personalul este în interiorul colegiului.
Convenții de denumire : Numele pachetelor sunt scrise în ordinea inversă a numelor de domenii, de ex. org.geeksforgeeks.practice. Într-o facultate convenția ar putea fi:
- colegiu.tech.cse
 - colegiu.tech.ee
 - colegiu.istoria.artei
 
Exemplu:
import java.util.*;
Aici util este un sub-pachet creat în interiorul pachetului java.
Accesarea cursurilor în interiorul unui pachet
În Java putem importa clase dintr-un pachet utilizând oricare dintre următoarele metode:
tipuri de date de referință în java
1. Importați o anumită clasă :
import java.util.Vector;
Aceasta importă doar clasa Vector din pachetul java.util.
2. Importați toate clasele dintr-un pachet :
import java.util.*;
Aceasta importă toate clasele și interfețele din pachetul java.util, dar nu include subpachetele.
Exemplu: Importați clasa 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();  } } 
   Ieșire
[3 5 7]
Nota:
- Folosind pachetul de import.*; importă toate clasele dintr-un pachet, dar nu și clasele din sub-pachetele acestuia.
 - Când două pachete au clase cu același nume (de exemplu, java.util.Date și my.package.Date) utilizați numele complet calificat pentru a evita conflictele:
 
import java.util.Date;
import my.package.Date;
Tipuri de pachete Java
- Pachete încorporate
 - Pachete definite de utilizator
 
1. Pachete încorporate
Aceste pachete constau dintr-un număr mare de clase care fac parte din Java API .Unele dintre pachetele încorporate utilizate în mod obișnuit sunt:
- java.lang : Conține clase de suport pentru limbaj (de exemplu, clase care definesc tipurile de date primitive operațiuni matematice). Acest pachet este importat automat.
 - java.io: Conține clase pentru susținerea operațiunilor de intrare/ieșire.
 - java.util : Conține clase de utilitate care implementează structuri de date precum Linked List Dictionary și suport; pentru operațiuni Data/Ora.
 - java.applet: Conține clase pentru crearea applet-urilor.
 - java.aut: Conțin clase pentru implementarea componentelor pentru interfețele grafice cu utilizatorul (cum ar fi buton, meniuri etc). 6)
 - java.net: Conțin clase pentru susținerea operațiunilor de rețea.
 
2. Pachete definite de utilizator
Acestea sunt pachetele care sunt definite de utilizator.
1. Creați pachetul:
Mai întâi creăm un director myPackage (numele ar trebui să fie același cu numele pachetului). Apoi creați MyClass în interiorul directorului, prima declarație fiind numele pachetelor.
Exemplu:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. Utilizați clasa în program:   
10 ml este cât
Acum vom folosi MyClass clasa din programul nostru.
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);  } } 
   
    Nota:   MyClass.java trebuie salvat în directorul myPackage deoarece face parte din pachet.  
Import static în Java
Importul static în Java se referă la simplificarea accesului la membrii statici și îl separă de discuția mai largă a pachetelor definite de utilizator.
Import static este o caracteristică introdusă în limbajul de programare Java (versiunile 5 și mai sus) care permite membrilor (câmpuri și metode) definiți într-o clasă ca public static pentru a fi folosit în codul Java fără a specifica clasa în care este definit câmpul.
Exemplu:
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');  } } 
   Ieșire
GeeksforGeeks
Gestionarea conflictelor de nume
Când două pachete conțin o clasă cu același nume (de exemplu, java.util.Date și java.sql.Date) specificați numele complet al pachetului pentru a evita conflictele.
import java.util.*;
import java.sql.*;
// Și apoi folosiți clasa Date, apoi vom obține o eroare de compilare:
Data azi; //EROARE-- java.util.Date sau java.sql.Date?
Compilatorul nu va putea da seama ce clasă Date dorim. Această problemă poate fi rezolvată folosind o instrucțiune specifică de import:
import java.util.Date;
import java.sql.*;
Dacă avem nevoie de ambele clase Date, atunci trebuie să folosim un nume complet de pachet de fiecare dată când declarăm un nou obiect al acelei clase. De exemplu:
java.util.Date deadLine = nou java.util.Date();
java.sql.Date today = nou java.sql.Date();ce inseamna xd
Structura directorului și CLASSPATH
Numele pachetelor corespund unei structuri de directoare. De exemplu, o clasă Circle din pachetul com.zzz.project1.subproject2 este stocată ca:
$BASE_DIR/com/zzz/project1/subproject2/Circle.class
- Aici $BASE_DIR reprezintă directorul de bază al pachetului.
 - „Punctul” din numele pachetului corespunde unui subdirector al sistemului de fișiere.
 - Directorul de bază ( $BASE_DIR ) ar putea fi localizat oriunde în sistemul de fișiere.
 - Prin urmare, compilatorul Java și timpul de execuție trebuie să fie informate despre locația $BASE_DIR pentru a localiza clasele.
 - Este realizat de o variabilă de mediu numită CLASSPATH .
 - CLASSPATH este similar cu o altă variabilă de mediu PATH care este folosită de shell-ul de comandă pentru a căuta programe executabile.
 
Setarea CLASSPATH
CLASSPATH poate fi setat prin oricare dintre următoarele moduri:
- CLASSPATH poate fi setat permanent în mediul pașii În Windows este
 
Accesați Panoul de control -> Sistem -> Avansat -> Variabile de mediu.
- Selectați „Variabile de sistem” pentru a aplica CLASSPATH pentru toți utilizatorii din sistem.
 - Selectați „Variabile utilizator” pentru a o aplica numai pentru utilizatorul conectat în prezent.
 - Editați sau creați CLASSPATH: dacă CLASSPATH există deja, selectați-l și faceți clic pe „Editați” sau, dacă nu există, faceți clic pe „Nou”
 - Introduceți detalii CLASSPATH: În câmpul „Nume variabilă” introduceți: „CLASSPATH” În câmpul „Valoare variabilă” introduceți directoarele și fișierele JAR separate prin punct și virgulă.
 - În câmpul „Valoare variabilă” introduceți directoarele și fișierele JAR separate prin punct și virgulă. Exemplu:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- Punctul (
.) reprezintă directorul de lucru curent. - Pentru a verifica setarea curentă a CLASSPATH, lansați următoarea comandă:
 
> SETARE CLASSPATH
CLASSPATH poate fi setat temporar pentru acea anumită sesiune de shell CMD prin lansarea următoarei comenzi:
> SETARE CLASSPATH=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar
În loc să utilizați variabila de mediu CLASSPATH, puteți utiliza și opțiunea din linia de comandă -classpath sau -cp a comenzilor javac și java, de exemplu
> java –classpath c:javaprojectclasses com.abc.project1.subproject2.MyClass3
Ilustrație a pachetelor definite de utilizator: Crearea primului nostru pachet: Nume fișier – ClassOne.java
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 Crearea celui de-al doilea pachet: Nume fișier – ClassTwo.java
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 Folosind ambele pachete create: Nume fișier – 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();  } } 
 Acum aruncați o privire asupra structurii directoarelor atât a pachetelor, cât și a fișierului clasa de testare:
  
Modificatori de acces în contextul pachetelor
-     Public:   Membrii cu
publicmodificatorii sunt accesibile de oriunde, indiferent dacă clasa care accesează este sau nu în același pachet . - Protejat: Membrii cu modificatorul protejat sunt accesibili în cadrul aceluiași pachet în subclase
 - Implicit: Membrii fără modificator sunt accesibili doar în cadrul aceluiași pachet
 -     Privat:   Membrii cu
privatemodificatorii sunt accesibile numai în cadrul aceleiași clase. Ele nu pot fi accesate de clase din aceleași subclase de pachete sau pachete diferite.