Java-пакет
Пакет Java организует Java классы в пространства имен . [1] предоставление уникального пространства имен для каждого содержащегося в нем типа. Классы в одном пакете могут получать доступ к частным и защищенным членам пакета друг друга.
В общем, пакет может содержать следующие типы типов : классы, интерфейсы , перечисления и аннотаций типы . Пакет позволяет разработчику группировать классы (и интерфейсы) вместе. Все эти классы будут каким-то образом связаны – все они могут иметь отношение к конкретному приложению или выполнять определенный набор задач. Программисты также обычно используют пакеты для организации классов, принадлежащих к одной и той же категории или предоставляющих схожие функциональные возможности.
Использование пакетов [ править ]
В исходном файле Java пакет, к которому принадлежит класс или классы этого файла, указывается с помощью package
ключевое слово . Это ключевое слово обычно является первым ключевым словом в исходном файле. В исходном файле может присутствовать не более одного объявления пакета.
package java.awt.event;
Чтобы использовать классы пакета внутри исходного файла 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();
не требует предшествующей импортной декларации.
Javadoc для всего пакета и аннотации [ править ]
Документация, объясняющая пакет в целом, записывается в формате Javadoc в файле с именем package-info.java. Этот файл также является местом для аннотаций, которые будут использоваться во всех классах пакета. [2]
Безымянный пакет [ править ]
Если объявление пакета не используется, классы помещаются в безымянный пакет. Классы в безымянном пакете не могут быть импортированы классами из любого другого пакета. [3] Официальный учебник Java не рекомендует этого делать:
- Вообще говоря, безымянный пакет предназначен только для небольших или временных приложений или когда вы только начинаете процесс разработки. В противном случае классы и интерфейсы принадлежат именованным пакетам. [4]
Защита доступа к пакету [ править ]
Открытые члены и классы видны повсюду, а частные члены видны только в одном классе. Классы внутри пакета могут получать доступ к классам и членам, объявленным с доступом по умолчанию ( package-private ), а также к членам класса, объявленным с помощью protected
модификатор доступа. Доступ по умолчанию (частный пакет) применяется, когда класс или член не объявлен как public
, protected
или private
. Напротив, классы в других пакетах не могут получить доступ к классам и членам, объявленным с доступом по умолчанию. Однако члены класса заявили, что protected
Доступ к ним можно получить из классов в том же пакете, а также из классов в других пакетах, которые являются подклассами объявляющего класса. [5]
Создание файлов JAR [ править ]
Файлы JAR создаются с помощью утилиты командной строки jar. Команда
jar cf myPackage.jar *.class
сжимает все файлы .class в JAR-файл myPackage.jar . Опция «c» в командной строке сообщает команде jar «создать новый архив». Опция 'f' сообщает ему о необходимости создания файла. Имя файла следует перед содержимым файла JAR.
Соглашения об именах пакетов [ править ]
Пакеты обычно определяются с использованием иерархического именования шаблона , при этом некоторые уровни иерархии разделены точками ( .
, произносится как «точка»). Хотя пакеты ниже в иерархии именования часто называют «подпакетами» соответствующих пакетов выше в иерархии, между пакетами почти нет семантических отношений. Спецификация языка Java устанавливает соглашения об именах пакетов, чтобы избежать возможности того, что два опубликованных пакета будут иметь одно и то же имя. Соглашения об именах описывают, как создавать уникальные имена пакетов, чтобы широко распространенные пакеты имели уникальные пространства имен. Это позволяет легко и автоматически устанавливать и каталогизировать пакеты отдельно.
Как правило, имя пакета начинается с имени домена верхнего уровня организации, затем домена организации, а затем всех поддоменов, перечисленных в обратном порядке. Затем организация может выбрать конкретное имя для своего пакета. Последующие компоненты имени пакета различаются в зависимости от внутренних соглашений об именах организации. [6]
Например, если канадская организация MySoft создает пакет для работы с дробями, назвав его ca.mysoft.fractions отличает пакет дробей от другого аналогичного пакета, созданного другой компанией. Если немецкая компания MySoft также создаст пакет дробей, но назовет его de.mysoft.fractions , то классы в этих двух пакетах определяются в уникальном и отдельном пространстве имен.
Полные соглашения по устранению неоднозначности имен пакетов и правила именования пакетов, когда имя домена Интернета не может быть напрямую использовано в качестве имени пакета, описаны в разделе 7.7 Спецификации языка Java. [7]
Базовые пакеты в Java SE 8 [ править ]
java.lang | базовые функции языка и фундаментальные типы, доступные без использования оператора импорта. |
---|---|
java.util | коллекции структуры данных классы |
java.io | файловые операции |
java.math | арифметика с множественной точностью |
java.nio | платформа неблокирующего ввода-вывода для Java |
java.net | сетевые операции, сокеты, поиск DNS , ... |
java.security | генерация ключей, шифрование и дешифрование |
java.sql | Java Database Connectivity (JDBC) для доступа к базам данных |
java.aut | базовая иерархия пакетов для собственных компонентов графического интерфейса |
java.текст | Предоставляет классы и интерфейсы для обработки текста, дат, чисел и сообщений способом, независимым от естественных языков. |
java.rmi | Предоставляет пакет RMI. |
java.time | Основной API для дат, времени, моментов и продолжительности. |
java.beans | Пакет java.beans содержит классы и интерфейсы, связанные с компонентами JavaBeans. |
Java.апплет | Этот пакет предоставляет классы и методы для создания апплетов и взаимодействия с ними. |
Модули [ править ]
В Java 9 (выпущенной 21 сентября 2017 г.) поддержка «модулей», своего рода коллекции пакетов, была реализована в результате усилий разработчиков Project Jigsaw. «Модули» ранее назывались «суперпакетами» и изначально планировались для Java 7.
Модули описывают свои зависимости в объявлении, размещенном в файле с именем Module-info.java в корне иерархии исходных файлов модуля. Начиная с Java 9 , JDK может проверять зависимости модулей как во время компиляции, так и во время выполнения. Сам JDK является модульным для Java 9 . [8] [9]
Ссылки [ править ]
- ^ Джеймс Гослинг, Билл Джой, Гай Стил, Гилад Брача, Спецификация языка Java, третье издание , ISBN 0-321-24678-0 , 2005 г. Во введении говорится: «Глава 7 описывает структуру программы, которая организована в пакеты, аналогичные модулям Modula».
- ^ «Глава 7. Пакеты и модули» . docs.oracle.com . Проверено 10 декабря 2021 г.
- ^ «Глава 7. Пакеты» . Docs.oracle.com . Проверено 15 сентября 2013 г.
- ^ «Создание и использование пакетов (Учебные пособия по Java™ > Изучение языка Java > Пакеты)» . docs.oracle.com .
- ^ «Управление доступом к членам класса (Учебные пособия по Java™ > Изучение языка Java > Классы и объекты)» . docs.oracle.com .
- ^ Соглашения о коде для языка программирования Java: 9. Соглашения об именах.
- ^ «Пакеты» . docs.oracle.com .
- ^ «Сводка модуля JDK» . Корпорация Оракл . 23 октября 2015 г. Архивировано из оригинала 8 декабря 2015 г. Проверено 29 ноября 2015 г.
- ^ «Понимание модулей Java 9» . Корпорация Оракл . 1 октября 2017 года . Проверено 4 октября 2022 г.