Пакети в Java — це механізм, який інкапсулює групу підпакетів класів та інтерфейсів. Пакети використовуються для:
- Запобігайте конфліктам імен, дозволивши класам з однаковою назвою існувати в різних пакетах, наприклад college.staff.cse.Employee та college.staff.ee.Employee.
 - Полегшіть організацію пошуку та використання інтерфейсів класів та інших компонентів.
 - Забезпечте контрольований доступ для захищених членів, які доступні в одному пакеті та підкласами. Члени за замовчуванням (без специфікатора доступу) доступні лише в одному пакеті.
 
Групуючи пов’язані класи в пакети, Java сприяє інкапсуляції даних, роблячи код придатним для повторного використання та легшим для керування. Просто імпортуйте потрібний клас із пакета, щоб використовувати його у своїй програмі.
Створення спеціальних пакетів
крок 1: Створіть каталог, у якому ми створимо наші пакети та файли Java.
mkdir ПРОГРАМУВАННЯ
підключити базу даних java
Крок 2: Тепер змініть каталог і створіть іншу папку всередині основної папки
ПРОГРАМУВАННЯ cd
mkdir Програмування Java
cd JavaПрограмування
масиви mkdir
крок 3: Тепер створіть порожній текстовий файл і напишіть наведений нижче код Java і не забудьте зберегти його з тим же ім’ям, що й клас із розширенням .java (TwoPointers.java)
Клас 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');  } } 
   
    Примітка:   Не забудьте додати назву пакета в програмний файл.
крок 4: Тепер запустіть програму, вказавши шлях до папки
javac srcJavaProgrammingarraysTwoPointers.java
java srcJavaProgrammingarraysTwoPointers.java
Вихід:
Запущена програма зі шляхом до папкиСтруктура папки:
Це візуальне представлення спеціального пакета в Java на зображенні нижче. Спочатку ми створюємо папку з назвою Progamming і всередині неї створюємо пакет Javaprogramming, а потім створюємо ще один підпакет під назвою масиви . Потім ми створюємо всередині нього файл класу Java, який показано на зображенні нижче:
Структура папкиРобота пакетів Java
Структура каталогу: Імена пакетів і структури каталогів тісно пов’язані. Наприклад, якщо ім’я пакета — college.staff.cse, тоді три каталоги — це співробітники коледжу та cse, де cse — це співробітники, а персонал — коледж.
Правила іменування : назви пакетів записуються в порядку, зворотному до доменних імен, напр. org.geeksforgeeks.practice. У коледжі конвенція може бути:
- college.tech.cse
 - college.tech.ee
 - коледж.мист.істор
 
приклад:
імпорт java.util.*;
Тут util — це підпакет, створений усередині пакета java.
Доступ до класів у пакеті
У Java ми можемо імпортувати класи з пакету за допомогою одного з наступних методів:
1. Імпорт певного класу :
імпорт java.util.Vector;
Це імпортує лише клас Vector з пакета java.util.
кордон css
2. Імпортувати всі класи з пакета :
імпорт java.util.*;
Це імпортує всі класи та інтерфейси з пакета java.util, але не включає підпакети.
приклад: Імпортуйте клас 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();  } } 
   Вихід
[3 5 7]
Примітка:
- Використання пакету імпорту.*; імпортує всі класи в пакеті, але не класи з його підпакетів.
 - Якщо два пакунки мають класи з однаковою назвою (наприклад, java.util.Date і my.package.Date), використовуйте повну назву, щоб уникнути конфліктів:
 
імпорт java.util.Date;
import my.package.Date;
Типи пакетів Java
- Вбудовані пакети
 - Визначені користувачем пакети
 
1. Вбудовані пакети
Ці пакети складаються з великої кількості класів, які є частиною Java API Деякі з часто використовуваних вбудованих пакетів:
- java.lang : Містить класи підтримки мови (наприклад, класи, які визначають математичні операції простих типів даних). Цей пакет імпортується автоматично.
 - java.io: Містить класи для підтримки операцій введення/виведення.
 - java.util : Містить службові класи, які реалізують такі структури даних, як словник пов’язаного списку та підтримку; для операцій дати/часу.
 - java.applet: Містить класи для створення аплетів.
 - java.aut: Містить класи для реалізації компонентів для графічного інтерфейсу користувача (наприклад, кнопки, меню тощо). 6)
 - java.net: Містить класи для підтримки мережевих операцій.
 
2. Визначені користувачем пакети
Це пакети, які визначає користувач.
1. Створіть пакет:
Спочатку ми створюємо каталог myPackage (ім’я має збігатися з ім’ям пакета). Потім створіть MyClass у каталозі, першим іменем якого є імена пакетів.
приклад:
Javapackage myPackage; public class MyClass {  public void getNames(String s)  {   System.out.println(s);   } } 
   
    2. Використовуйте клас у програмі:   
Тепер ми будемо використовувати МійКлас класу в нашій програмі.
mvc у рамках SpringJava
 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);  } } 
   
    Примітка:   MyClass.java має бути збережений у каталозі myPackage, оскільки він є частиною пакета.  
Статичний імпорт в Java
Статичний імпорт у Java спрощує доступ до статичних членів і відокремлює його від ширшого обговорення пакетів, визначених користувачем.
Статичний імпорт це функція, представлена в мові програмування Java (версії 5 і вище), яка дозволяє членам (полям і методам), визначеним у класі, як публічні статичний для використання в коді Java без вказівки класу, у якому визначено поле.
приклад:
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
Обробка конфліктів імен
Якщо два пакунки містять клас з однаковою назвою (наприклад, java.util.Date і java.sql.Date), укажіть повну назву пакунка, щоб уникнути конфліктів.
імпорт java.util.*;
імпорт java.sql.*;
//А потім скористайтеся класом Date, тоді ми отримаємо помилку під час компіляції:
Сьогоднішня дата; //ПОМИЛКА-- java.util.Date чи java.sql.Date?
Компілятор не зможе визначити, який клас Date нам потрібен. Цю проблему можна вирішити за допомогою спеціального оператора імпорту:
імпорт java.util.Date;
імпорт java.sql.*;
Якщо нам потрібні обидва класи Date, тоді нам потрібно використовувати повну назву пакета кожного разу, коли ми оголошуємо новий об’єкт цього класу. Наприклад:
java.util.Date deadLine = новий java.util.Date();
java.sql.Date сьогодні = новий java.sql.Date();javafx
Структура каталогу та CLASSPATH
Імена пакетів відповідають структурі каталогу. Наприклад, клас Circle у пакеті com.zzz.project1.subproject2 зберігається як:
$BASE_DIR/com/zzz/project1/subproject2/Circle.class
- тут $BASE_DIR представляє базовий каталог пакета.
 - «Точка» в назві пакета відповідає підкаталогу файлової системи.
 - Базовий каталог ( $BASE_DIR ) можуть бути розташовані будь-де у файловій системі.
 - Отже, компілятор Java і середовище виконання повинні бути проінформовані про розташування $BASE_DIR, щоб знайти класи.
 - Це виконується змінною середовища під назвою CLASSPATH .
 - CLASSPATH подібна до іншої змінної середовища PATH, яка використовується командною оболонкою для пошуку виконуваних програм.
 
Налаштування CLASSPATH
CLASSPATH можна встановити одним із таких способів:
- CLASSPATH можна постійно встановити в середовищі кроків у Windows
 
Перейдіть до Панелі керування -> Система -> Додатково -> Змінні середовища.
- Виберіть «Системні змінні», щоб застосувати шлях до класів для всіх користувачів системи.
 - Виберіть «Змінні користувача», щоб застосувати їх лише для користувача, який наразі ввійшов у систему.
 - Редагувати або створити CLASSPATH: якщо CLASSPATH уже існує, виберіть його та натисніть «Редагувати», або, якщо він не існує, натисніть «Новий»
 - Введіть деталі CLASSPATH: у полі «Ім’я змінної» введіть: «CLASSPATH» У полі «Значення змінної» введіть каталоги та файли JAR, розділені крапкою з комою.
 - У полі «Значення змінної» введіть каталоги та файли JAR, розділивши їх крапкою з комою. приклад:
 
.c:javaprojectclasses;d:tomcatlibservlet-api.jar
- крапка (
.) представляє поточний робочий каталог. - Щоб перевірити поточне налаштування CLASSPATH, виконайте таку команду:
 
> SET CLASSPATH
CLASSPATH можна тимчасово встановити для конкретного сеансу оболонки CMD, виконавши таку команду:
> SET CLASSPATH=.;c:javaprojectclasses;d:tomcatlibservlet-api.jar
Замість використання змінної середовища CLASSPATH ви також можете використовувати параметр командного рядка -classpath або -cp команд javac і java, наприклад
> java –classpath c:javaprojectclasses com.abc.project1.subproject2.MyClass3
Ілюстрація визначених користувачем пакетів: Створення нашого першого пакета: ім’я файлу – ClassOne.java
Javapackage package_name; public class ClassOne {  public void methodClassOne()  {  System.out.println('Hello there its ClassOne');  } } 
 Створення нашого другого пакета: ім’я файлу – ClassTwo.java
Javapackage package_one; public class ClassTwo {  public void methodClassTwo()  {  System.out.println('Hello there i am ClassTwo');  } } 
 Використання обох створених пакетів: Ім’я файлу – 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();  } } 
 Тепер поглянемо на структуру каталогів пакетів і файлу тестового класу:
  
Модифікатори доступу в контексті пакетів
-     Публічний:   Учасники з
publicмодифікатор доступний з будь-якого місця, незалежно від того, чи є клас, що отримує доступ, у тому самому пакеті чи ні . - Захищено: Члени з модифікатором protected доступні в межах одного пакета в підкласах
 - За замовчуванням: Члени без модифікатора доступні лише в одному пакеті
 -     Приватний:   Учасники з
privateмодифікатор доступний лише в межах одного класу. До них не можуть отримати доступ класи в одному підкласі пакета або різні пакети.