Paketi u Javi su mehanizam koji enkapsulira grupu podpaketa klasa i sučelja. Paketi se koriste za:
- Spriječite sukobe naziva dopuštajući klasama s istim imenom da postoje u različitim paketima kao što su college.staff.cse.Employee i college.staff.ee.Employee.
 - Olakšajte organiziranje lociranja i korištenja sučelja klasa i drugih komponenti.
 - Omogućite kontrolirani pristup zaštićenim članovima koji su dostupni unutar istog paketa i po podklasama. Zadani članovi (bez specifikacije pristupa) dostupni su samo unutar istog paketa.
 
Grupiranjem povezanih klasa u pakete Java promiče enkapsulaciju podataka čineći kod višekratnim korištenjem i lakšim za upravljanje. Jednostavno uvezite željenu klasu iz paketa da biste je koristili u svom programu.
Stvaranje prilagođenih paketa
Korak 1: Napravite direktorij u kojem ćemo kreirati svoje pakete i Java datoteke.
mkdir PROGRAMIRANJE
cdr puni oblik
Korak 2: Sada promijenite direktorij i stvorite drugu mapu unutar glavne mape
cd PROGRAMIRANJE
mkdir Java programiranje
cd Java programiranje
mkdir polja
Korak 3: Sada stvorite praznu tekstualnu datoteku i napišite donji Java kod i ne zaboravite ga spremiti pod istim imenom kao klasa s ekstenzijom .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');  } } 
   
    Bilješka:   Ne zaboravite dodati naziv paketa unutar programske datoteke.
Korak 4: Sada pokrenite program s definiranom putanjom mape
javac srcJavaProgrammingarraysTwoPointers.java
java srcJavaProgrammingarraysTwoPointers.java
Izlaz:
Pokretanje programa s putanjom mapeStruktura mape:
Ovo je vizualni prikaz prilagođenog paketa u Javi na donjoj slici. Prvo kreiramo mapu pod nazivom Progamming i unutar nje kreiramo paket Javaprogramming, a zatim kreiramo još jedan podpaket koji se zove nizovi . Zatim unutar nje kreiramo datoteku Java klase koja je prikazana na slici ispod:
Struktura mapeRad Java paketa
Struktura imenika: Nazivi paketa i strukture direktorija usko su povezani. Na primjer, ako je naziv paketa college.staff.cse tada su tri direktorija fakultetsko osoblje i cse gdje je cse unutar osoblja, a osoblje unutar fakulteta.
Konvencije imenovanja : Imena paketa pišu se obrnutim redoslijedom od naziva domena, npr. org.geeksforgeeks.practice. Na koledžu bi konvencija mogla biti:
- koledž.tech.cse
 - koledž.tech.ee
 - koledž.umjetnost.povijest
 
Primjer:
tok java filtera
import java.util.*;
Ovdje je util potpaket kreiran unutar java paketa.
Pristup razredima unutar paketa
U Javi možemo uvesti klase iz paketa pomoću jedne od sljedećih metoda:
1. Uvezite određenu klasu :
import java.util.Vector;
Time se uvozi samo klasa Vector iz paketa java.util.
2. Uvezite sve klase iz paketa :
import java.util.*;
Ovo uvozi sve klase i sučelja iz paketa java.util, ali ne uključuje pod-pakete.
Primjer: Uvezite klasu 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();  } } 
   Izlaz
[3 5 7]
Bilješka:
- Korištenje uvoznog paketa.*; uvozi sve klase u paketu, ali ne i klase iz njegovih pod-paketa.
 - Kada dva paketa imaju klase s istim imenom (npr. java.util.Date i my.package.Date) koristite potpuno kvalificirano ime kako biste izbjegli sukobe:
 
import java.util.Date;
import my.package.Date;
apstraktna klasa
Vrste Java paketa
- Ugrađeni paketi
 - Korisnički definirani paketi
 
1. Ugrađeni paketi
Ovi paketi se sastoje od velikog broja klasa koje su dio Jave API .Neki od najčešće korištenih ugrađenih paketa su:
- java.lang : Sadrži klase jezične podrške (npr. klase koje definiraju matematičke operacije primitivnih tipova podataka). Ovaj paket se automatski uvozi.
 - java.io: Sadrži klase za podršku operacijama unosa/izlaza.
 - java.util : Sadrži uslužne klase koje implementiraju strukture podataka kao što je rječnik povezanog popisa i podrška; za operacije datuma/vremena.
 - java.applet: Sadrži klase za stvaranje apleta.
 - java.aut: Sadrži klase za implementaciju komponenti za grafička korisnička sučelja (poput gumba, izbornika itd.). 6)
 - java.net: Sadrži klase za podršku mrežnim operacijama.
 
2. Korisnički definirani paketi
To su paketi koje definira korisnik.
1. Napravite paket:
Prvo kreiramo direktorij myPackage (naziv treba biti isti kao naziv paketa). Zatim stvorite MyClass unutar direktorija s prvom naredbom imena paketa.
Primjer:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. Koristite klasu u programu:   
Sada ćemo koristiti Moj razred razreda u našem programu.
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);  } } 
   
    Bilješka:   MyClass.java mora biti spremljena unutar direktorija myPackage jer je dio paketa.  
Statički uvoz u Javi
Statički uvoz u Javi odnosi se na pojednostavljenje pristupa statičkim članovima i odvaja ga od šire rasprave o korisnički definiranim paketima.
Statički uvoz je značajka predstavljena u programskom jeziku Java (verzije 5 i novije) koja omogućuje članove (polja i metode) definirane u klasi kao javne statički koristiti u Java kodu bez navođenja klase u kojoj je polje definirano.
Primjer:
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');  } } 
   Izlaz
GeeksforGeeks
Rješavanje sukoba imena
Kada dva paketa sadrže klasu s istim imenom (npr. java.util.Date i java.sql.Date) navedite puni naziv paketa kako biste izbjegli sukobe.
import java.util.*;
import java.sql.*;
//I onda upotrijebite klasu Datum i tada ćemo dobiti pogrešku u vremenu kompajliranja:
Današnji datum; //GREŠKA-- java.util.Date ili java.sql.Date?
Prevodilac neće moći otkriti koju klasu datuma želimo. Ovaj se problem može riješiti korištenjem specifične izjave za uvoz:
import java.util.Date;
import java.sql.*;
Ako su nam potrebne obje klase datuma, tada moramo koristiti puni naziv paketa svaki put kada deklariramo novi objekt te klase. Na primjer:
java.util.Date deadLine = novi java.util.Date();
java.sql.Datum danas = novi java.sql.Datum();sta znaci xd
Struktura direktorija i CLASSPATH
Nazivi paketa odgovaraju strukturi direktorija. Na primjer, klasa Circle u paketu com.zzz.project1.subproject2 pohranjena je kao:
$BASE_DIR/com/zzz/project1/subproject2/Circle.class
- Ovdje $BASE_DIR predstavlja osnovni direktorij paketa.
 - 'Točka' u nazivu paketa odgovara poddirektoriju datotečnog sustava.
 - Osnovni imenik ( $BASE_DIR ) može se nalaziti bilo gdje u datotečnom sustavu.
 - Stoga Java prevodilac i runtime moraju biti obaviješteni o lokaciji $BASE_DIR kako bi locirali klase.
 - To se postiže varijablom okruženja tzv CLASSPATH .
 - CLASSPATH je sličan drugoj varijabli okruženja PATH koju koristi naredbena ljuska za traženje izvršnih programa.
 
Postavljanje CLASSPATH
CLASSPATH se može postaviti na bilo koji od sljedećih načina:
- CLASSPATH se može postaviti trajno u okruženju koje su koraci u sustavu Windows
 
Idite na Upravljačku ploču -> Sustav -> Napredno -> Varijable okruženja.
- Odaberite 'Sistemske varijable' da biste primijenili CLASSPATH za sve korisnike u sustavu.
 - Odaberite 'Korisničke varijable' kako biste je primijenili samo na trenutno prijavljenog korisnika.
 - Uredi ili stvori CLASSPATH : Ako CLASSPATH već postoji, odaberite ga i kliknite 'Uredi' ili ako ne postoji kliknite 'Novo'
 - Unesite pojedinosti o CLASSPATH: U polje 'Naziv varijable' unesite: 'CLASSPATH' U polje 'Vrijednost varijable' unesite direktorije i JAR datoteke odvojene točkom-zarezom.
 - U polje 'Vrijednost varijable' unesite direktorije i JAR datoteke odvojene točkom-zarezom. Primjer:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- točka (
.) predstavlja trenutni radni direktorij. - Za provjeru trenutne postavke CLASSPATH izdajte sljedeću naredbu:
 
> POSTAVITE PUTANJU RAZREDA
CLASSPATH se može privremeno postaviti za tu određenu sesiju CMD ljuske izdavanjem sljedeće naredbe:
> SET CLASSPATH=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar
Umjesto korištenja varijable okoline CLASSPATH, također možete koristiti opciju naredbenog retka -classpath ili -cp naredbi javac i java
> java –classpath c:javaprojectclasses com.abc.project1.subproject2.MyClass3
Ilustracija korisnički definiranih paketa: Izrada našeg prvog paketa: Naziv datoteke – ClassOne.java
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 Stvaranje našeg drugog paketa: Naziv datoteke – ClassTwo.java
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 Korištenje oba stvorena paketa: Naziv datoteke – 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();  } } 
 Sada gledamo strukturu direktorija i paketa i datoteke klase za testiranje:
  
Modifikatori pristupa u kontekstu paketa
-     Javnost:   Članovi s
publicmodifikatora dostupni su s bilo kojeg mjesta bez obzira je li klasa kojoj se pristupa u istom paketu ili ne . - Zaštićen: Članovi sa zaštićenim modifikatorom dostupni su unutar istog paketa u podrazredima
 - Zadano: Članovi bez modifikatora dostupni su samo unutar istog paketa
 -     Privatno:   Članovi s
privatemodifikatora dostupni su samo unutar iste klase. Ne mogu im pristupiti klase u istim podklasama paketa ili različitim paketima.