Пакети у Јави су механизам који инкапсулира групу подпакета и интерфејса класа. Пакети се користе за:
- Спречите конфликте у именовању тако што ћете дозволити да класе са истим именом постоје у различитим пакетима као што су цоллеге.стафф.цсе.Емплоиее и цоллеге.стафф.ее.Емплоиее.
 - Олакшајте организовање лоцирања и коришћења интерфејса класа и других компоненти.
 - Обезбедите контролисан приступ за заштићене чланове који су доступни у оквиру истог пакета и по подкласама. Подразумевани чланови (без спецификације приступа) су доступни само у оквиру истог пакета.
 
Груписањем повезаних класа у пакете Јава промовише енкапсулацију података чинећи код вишекратну употребу и лакшим за управљање. Једноставно увезите жељену класу из пакета да бисте је користили у свом програму.
Креирање прилагођених пакета
1. корак: Направите директоријум у коме креирамо наше пакете и Јава датотеке.
мкдир ПРОГРАМИРАЊЕ
обрнути низ у Јави
2. корак: Сада промените директоријум и креирајте другу фасциклу унутар главне фасцикле
цд ПРОГРАМИРАЊЕ
мкдир ЈаваПрограмминг
цд ЈаваПрограмминг
мкдир низови
Корак 3: Сада направите празну текстуалну датотеку и напишите доњи Јава код и не заборавите да га сачувате под истим именом као и класа са екстензијом .јава (ТвоПоинтерс.јава)
ТвоПоинтерс Цласс.
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');  } } 
   
    Напомена:   Не заборавите да додате назив пакета унутар програмске датотеке.
4. корак: Сада покрените програм са дефинисаном путањом фасцикле
јавац срцЈаваПрограммингарраисТвоПоинтерс.јава
јава срцЈаваПрограммингарраисТвоПоинтерс.јава
Излаз:
Покретање програма са путањом до фасциклеСтруктура фолдера:
Ово је визуелни приказ прилагођеног пакета у Јави на слици испод. Прво креирамо фасциклу под називом Прогамминг и унутар ње креирамо пакет Јавапрограмминг, а затим креирамо други потпакет који се зове низови . Затим креирамо датотеку Јава класе унутар ње која је приказана на слици испод:
Структура фолдераРад Јава пакета
Структура именика: Имена пакета и структуре директоријума су уско повезани. На пример, ако је име пакета колеџ.стафф.цсе, онда су три директоријума особље колеџа и цсе где је цсе унутар особља, а особље унутар колеџа.
Конвенције о именовању : Имена пакета се пишу обрнутим редоследом од имена домена, нпр. орг.геексфоргеекс.працтице. На колеџу конвенција може бити:
- цоллеге.тецх.цсе
 - цоллеге.тецх.ее
 - колеџ.уметност.историја
 
Пример:
кнн алгоритам
импорт јава.утил.*;
Овде утил је потпакет креиран унутар јава пакета.
Приступање класама унутар пакета
У Јави можемо да увеземо класе из пакета користећи било који од следећих метода:
1. Увезите одређену класу :
импорт јава.утил.Вецтор;
Ово увози само класу Вецтор из пакета јава.утил.
2. Увезите све класе из пакета :
импорт јава.утил.*;
Ово увози све класе и интерфејсе из пакета јава.утил, али не укључује подпакете.
Пример: Увезите класу Вецтор
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();  } } 
   Излаз
[3 5 7]
Напомена:
- Коришћење пакета за увоз.*; увози све класе у пакету, али не и класе из својих потпакета.
 - Када два пакета имају класе са истим именом (нпр. јава.утил.Дате и ми.пацкаге.Дате) користите потпуно квалификовано име да бисте избегли сукобе:
 
импорт јава.утил.Дате;
импорт ми.пацкаге.Дате;
шта ово кд значи
Врсте Јава пакета
- Уграђени пакети
 - Кориснички дефинисани пакети
 
1. Уграђени пакети
Ови пакети се састоје од великог броја класа које су део Јаве АПИ .Неки од најчешће коришћених уграђених пакета су:
- јава.ланг : Садржи класе подршке језику (нпр. класе које дефинишу математичке операције примитивних типова података). Овај пакет се аутоматски увози.
 - јава.ио: Садржи класе за подршку улазних/излазних операција.
 - јава.утил : Садржи услужне класе које имплементирају структуре података као што је речник повезаних листа и подршку; за операције датума/времена.
 - јава.апплет: Садржи класе за креирање аплета.
 - јава.аут: Садржи класе за имплементацију компоненти за графичке корисничке интерфејсе (попут дугмета; менија итд.). 6)
 - јава.нет: Садржи класе за подршку мрежним операцијама.
 
2. Кориснички дефинисани пакети
Ово су пакети које дефинише корисник.
1. Креирајте пакет:
Прво креирамо директоријум миПацкаге (име треба да буде исто као име пакета). Затим креирајте МиЦласс унутар директоријума са првом наредбом имена пакета.
Пример:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. Користите разред у програму:   
Сада ћемо користити МиЦласс часа у нашем програму.
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);  } } 
   
    Напомена:   МиЦласс.јава мора бити сачувана унутар миПацкаге директоријума пошто је део пакета.  
Статички увоз у Јаву
Статички увоз у Јави се односи на поједностављивање приступа статичним члановима и одваја га од шире расправе о кориснички дефинисаним пакетима.
Статички увоз је функција уведена у програмски језик Јава (верзије 5 и новије) која омогућава члановима (поља и методе) дефинисане у класи као јавне статичне да се користи у Јава коду без навођења класе у којој је поље дефинисано.
Пример:
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');  } } 
   Излаз
GeeksforGeeks
Руковање сукобима имена
Када два пакета садрже класу са истим именом (нпр. јава.утил.Дате и јава.скл.Дате) наведите пуно име пакета да бисте избегли конфликте.
импорт јава.утил.*;
импорт јава.скл.*;
// И онда користите класу Дате онда ћемо добити грешку у времену компајлирања:
Датум данас ; //ГРЕШКА-- јава.утил.Дате или јава.скл.Дате?
Компајлер неће моћи да схвати коју класу Дате желимо. Овај проблем се може решити коришћењем специфичне изјаве за увоз:
импорт јава.утил.Дате;
импорт јава.скл.*;
Ако су нам потребне обе класе Дате, онда морамо да користимо пуно име пакета сваки пут када декларишемо нови објекат те класе. На пример:
јава.утил.Дате деадЛине = нев јава.утил.Дате();
јава.скл.Дате тодаи = нев јава.скл.Дате();разлика тигра и лава
Структура именика и ЦЛАССПАТХ
Имена пакета одговарају структури директоријума. На пример, класа Цирцле у пакету цом.ззз.пројецт1.субпројецт2 се чува као:
$БАСЕ_ДИР/цом/ззз/пројецт1/субпројецт2/Цирцле.цласс
- Ево $БАСЕ_ДИР представља основни директоријум пакета.
 - 'Тачка' у називу пакета одговара поддиректоријуму система датотека.
 - Основни директоријум ( $БАСЕ_ДИР ) може се налазити било где у систему датотека.
 - Стога Јава компајлер и време извођења морају бити обавештени о локацији $БАСЕ_ДИР да би лоцирали класе.
 - То се постиже променљивом окружења која се зове ЦЛАССПАТХ .
 - ЦЛАССПАТХ је сличан другој променљивој окружења ПАТХ коју користи командна шкољка за тражење извршних програма.
 
Подешавање ЦЛАССПАТХ
ЦЛАССПАТХ се може подесити на било који од следећих начина:
- ЦЛАССПАТХ се може трајно подесити у окружењу које су кораци у Виндовс-у
 
Идите на Цонтрол Панел -> Систем -> Адванцед -> Енвиронмент Вариаблес.
- Изаберите „Систем Вариаблес“ да бисте применили ЦЛАССПАТХ за све кориснике у систему.
 - Изаберите „Корисничке променљиве“ да бисте га применили само на тренутно пријављеног корисника.
 - Уредите или креирајте ЦЛАССПАТХ : Ако ЦЛАССПАТХ већ постоји изаберите га и кликните на 'Измени' или ако не постоји кликните на 'Ново'
 - Унесите детаље о ЦЛАССПАТХ: У поље 'Вариабле наме' унесите: 'ЦЛАССПАТХ' У поље 'Вариабле валуе' унесите директоријуме и ЈАР датотеке одвојене тачком и зарезом.
 - У поље 'Вариабле валуе' унесите директоријуме и ЈАР датотеке раздвојене тачком и зарезом. Пример:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- тачка (
.) представља тренутни радни директоријум. - Да бисте проверили тренутну поставку ЦЛАССПАТХ, издајте следећу команду:
 
> СЕТ ЦЛАССПАТХ
ЦЛАССПАТХ се може привремено подесити за ту одређену сесију ЦМД љуске издавањем следеће команде:
> СЕТ ЦЛАССПАТХ=.;ц:јавапројецтцлассес;д:томцатлибсервлет-апи.јар
Уместо да користите променљиву окружења ЦЛАССПАТХ, можете користити и опцију командне линије -цласспатх или -цп јавац и јава команди, на пример
> јава –цласспатх ц:јавапројецтцлассес цом.абц.пројецт1.субпројецт2.МиЦласс3
Илустрација кориснички дефинисаних пакета: Креирање нашег првог пакета: Име датотеке – ЦлассОне.јава
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 Креирање нашег другог пакета: Име датотеке – ЦлассТво.јава
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 Коришћење оба креирана пакета: Име датотеке – Тестинг.јава
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();  } } 
 Сада погледајте структуру директоријума и пакета и датотеке класе за тестирање:
  
Модификатори приступа у контексту пакета
-     Јавно:   Чланови са
publicмодификатори су доступни са било ког места, без обзира да ли је приступна класа у истом пакету или не . - Заштићено: Чланови са заштићеним модификатором су доступни у оквиру истог пакета У подкласама
 - Подразумевано: Чланови без модификатора су доступни само у оквиру истог пакета
 -     Приватно:   Чланови са
privateмодификатори су доступни само унутар исте класе. Не могу им приступити класе у истим подкласама пакета или различитим пакетима.