Java package

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Java package організовує Java-класи у просторах імен[1], надаючи унікальний простір імен для кожного класу, який він містить. Класи в одному пакеті можуть отримувати доступ до приватних і захищених членів пакету. Java package можуть зберігатися у стислих файлах, з розширенням JAR.

В основному, пакет може містити такі типи даних: класи, інтерфейси, перерахування та анотації. Пакет дозволяє розробнику групувати класи (і інтерфейси) разом. Всі ці класи будуть пов'язані певним чином — всі вони матимуть відношення до конкретної програми або будуть виконувати певний набір завдань. Програмісти також зазвичай використовують пакети для організації класів, що належать до однієї категорії, або для забезпечення подібної функціональності.

Використання пакетів[ред. | ред. код]

У джерельному файлі Java, package, до якого належать клас або класи цього файлу, задається зарезервованим словом package . Це ключове слово зазвичай є першим. У джерельному файлі може бути присутня лише одна декларація пакета.

package  java.awt.event;

Для використання класів Java package у файлі Java-програми зручно імпортувати класи за допомогою зарезервованого слова import . Наступний рядок коду

import java.awt.event.*;

імпортує всі класи з пакета java.awt.event , а цей рядок

import java.awt.event.ActionEvent;

імпортує з пакета тільки клас ActionEvent . Після будь-якого типу імпорту, клас ActionEvent можна використовувати за допомогою його імені:

ActionEvent myEvent = new ActionEvent();

Класи також можна використовувати безпосередньо без імпорту, використовуючи повне ім'я класу. Наприклад,

java.awt.event.ActionEvent  myEvent = new java.awt.event.ActionEvent();

не вимагає попереднього імпортування.

Пакет без назви[ред. | ред. код]

Зауважте, якщо декларація пакета відсутня, то клас потрапляє в безіменний пакет. Класи в безіменному пакеті не можуть бути імпортовані як класи в будь-якому іншому пакеті.[2]

Офіційний навчальний посібник Java радить цього не робити: Взагалі кажучи, безіменний пакет призначений лише для невеликих або тимчасових програм, або для найперших стадій розробки програми. В іншому випадку класи і інтерфейси належать до іменованих пакетів.[3]

Захист доступу до пакета[ред. | ред. код]

Публічні члени та класи є видимими всюди, а приватні члени видимі тільки в одному класі. Класи всередині пакета можуть отримати доступ до класів і членів, які отримали модифікатор доступу за замовчуванням (private), так само як і до членів класу, оголошених з модифікатором доступу protected. Доступ за замовчуванням (private) застосовується, коли клас або член не були оголошені з модифікаторами public , protected або private . На відміну від цього, класи в інших пакетах не можуть отримати доступ до класів і членів, оголошених з доступом за замовчуванням. Проте, учасники класу, оголошені як protected можуть бути доступні з класів в одному пакеті, а також з класами в інших пакетах, які є підкласами цих класів.[4]

Створення файлів JAR[ред. | ред. код]

Файли JAR створюються за допомогою командного рядка jar. Команда

 jar cf myPackage.jar * .class 

стискає всі .class файли в JAR-файл myPackage.jar . Опція 'c' вказує на «створення нового архіву». Опція 'f' повідомляє йому про створення файлу. Назва файлу вказується перед вмістом файлу JAR.

Узгодження про іменування пакетів[ред. | ред. код]

Пакети, як правило, визначаються за допомогою ієрархічного шаблону іменування, причому деякі рівні в ієрархії розділені періодами (. , Вимовляється «крапка»). Хоча пакети нижчих в ієрархії імен часто називають «підпакетами» відповідних пакетів вище в ієрархії. Специфікація мови Java встановлює правила іменування пакетів, щоб уникнути можливості двох опублікованих пакетів з однаковою назвою. Узгодження про найменування описує, як створювати унікальні назви пакетів, так, щоб пакети, які широко вживаються, мали унікальні простори імен. Це дозволяє легко і автоматично встановлювати і каталогізувати пакети незалежно від інших пакетів.

Загалом, назва пакета починається з імені домену верхнього рівня організації, а потім домену організації, а потім будь-яких субдоменів, перерахованих у зворотному порядку. Організація може потім вибрати певне ім'я для свого пакета. Наступні компоненти імені пакету змінюються відповідно до власних внутрішніх правил організації.[5]

Наприклад, якщо організація в Канаді, яка називається MySoft, створює пакет для роботи з дробовими числами, іменування пакета ca.mysoft.fractions відрізняє пакет дробів від іншого подібного пакета, створеного іншою компанією. Якщо німецька компанія MySoft також створює пакет дробів, вона називає її de.mysoft.fractions, тому класи цих двох пакетів визначаються в унікальному і окремому просторі імен.

Всі домовленості щодо визначення неоднозначності імен пакетів і правил їх іменування, коли ім'я Інтернет домену не може бути безпосередньо використано як ім'я пакета, описані в розділі 7.7 специфікації мови Java.[6]

Основні пакети в Java SE 8[ред. | ред. код]

java.lang — основний функціонал та базові типи мови Java
java.util — Включає в себе багато допоміжних класів для роботи зі структурами даних, математичними функціями. А також для генерації випадкових чисел та роботи з датою та часом
java.io — забезпечує роботу з файлами
java.math — операції зі збільшеною точністю
java.nio Неблокуючий I/O фреймворк[en] для Java для високопродуктивних операцій введення-виведення
java.net — мережеві операції, сокети, …
java.security — генерація ключів, шифрування та дешифрування
java.sql Java Database Connectivity (JDBC) для доступу до баз даних
java.awt — основна ієрархія пакетів для первинних компонентів графічного інтерфейсу
java.text — Забезпечує класи та інтерфейси для обробки тексту, дат, чисел і повідомлень, незалежно від звичайних мов
java.rmi — Надає пакет RMI.
java.time — Головний API для дати, часу,. . .
java.beans — Пакет java.beans містить класи та інтерфейси, пов'язані з компонентами JavaBeans.
java.Applet — Цей пакет надає класи та методи для створення та спілкування з аплетами.

Пакет java.lang доступний без імпорту.

Модулі[ред. | ред. код]

В Java 9, «модулі»[en] — вид збірки пакетів, створений в рамках проекту Jigsaw; модулі раніше називалися «суперпакетами» і спочатку планувалися для Java 7.

Модулі описують свої залежності в декларації модуля, яка розміщена у файлі з ім'ям module-info.java в корені ієрархії вихідних файлів модуля. JDK перевіряє їх як під час компіляції, так і під час виконання. Сам JDK був введений в Java 9.[7]

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Джеймс Гослінг, Біл Джой, Гай Стіл, Гілад Брача, специфікація мови Java, третє видання
  2. Chapter 7. Packages. Docs.oracle.com. Процитовано 2013-09-15. 
  3. https://docs.oracle.com/javase/tutorial/java/package/packages.html
  4. http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
  5. Умови коду для мови програмування Java: 9. Умовні позначення
  6. http://docs.oracle.com/javase/specs/jls/se6/html/packages.html#7.7
  7. JDK Module Summary. Oracle Corporation. 2015-10-23. Процитовано 2015-11-29. 

Посилання[ред. | ред. код]