stringtranslate.com

Java-пакет

Пакет Java организует классы Java в пространства имен , [1] предоставляя уникальное пространство имен для каждого типа, который он содержит. Классы в одном пакете могут получать доступ к закрытым и защищенным членам друг друга.

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

Использование пакетов

В исходном файле Java пакет, к которому принадлежит класс или классы этого файла, указывается ключевым package словом . Это ключевое слово обычно является первым ключевым словом в исходном файле. В исходном файле может быть максимум одно объявление пакета.

пакет java.awt.event ; 

Чтобы использовать классы пакета внутри исходного файла Java, удобно импортировать классы из пакета с помощью importобъявления. Следующее объявление

импорт java.awt.event.* ; 

импортирует все классы из java.awt.eventпакета, в то время как следующее объявление

импорт java.awt.event.ActionEvent ; 

импортирует только ActionEventкласс из пакета. После любого из этих деклараций импорта на ActionEventкласс можно ссылаться, используя его простое имя класса:

ActionEvent myEvent = new ActionEvent ();    

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

java.awt.событие.ActionEvent myEvent = new java.awt.событие.ActionEvent ( ) ;    

не требует предварительной импортной декларации.

Javadoc и аннотации для всего пакета

Документация, объясняющая пакет в целом, написана как Javadoc в файле с именем `package-info.java`. Этот файл также является местом для аннотаций, которые будут использоваться во всех классах пакета. [2]

Безымянный пакет

Если объявление пакета не используется, классы помещаются в безымянный пакет. Классы в безымянном пакете не могут быть импортированы классами в любом другом пакете. [3] Официальный учебник Java не рекомендует этого делать:

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

Защита доступа к пакету

Открытые члены и классы видны везде, а закрытые члены видны только в том же классе. Классы внутри пакета могут получать доступ к классам и членам, объявленным с доступом по умолчанию ( package-private ), а также к членам класса, объявленным с protectedмодификатором доступа. Доступ по умолчанию (package-private) применяется, когда класс или член не был объявлен как public, protectedили private. Напротив, классы в других пакетах не могут получать доступ к классам и членам, объявленным с доступом по умолчанию. Однако к членам класса, объявленным как , protectedможно получить доступ из классов в том же пакете, а также из классов в других пакетах, которые являются подклассами объявляющего класса. [5]

Создание JAR-файлов

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

jar cf мойПакет.jar *.класс

сжимает все файлы .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 9 (выпущенной 21 сентября 2017 г.) поддержка «модулей», своего рода наборов пакетов, была реализована в результате усилий по разработке Project Jigsaw. «Модули» ранее назывались «суперпакетами» и изначально планировались для Java 7.

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

Ссылки

  1. ^ Джеймс Гослинг, Билл Джой, Гай Стил, Гилад Браха, Спецификация языка Java, третье издание , ISBN  0-321-24678-0 , 2005. Во введении говорится: «Глава 7 описывает структуру программы, которая организована в пакеты, подобные модулям Modula».
  2. ^ "Глава 7. Пакеты и модули". docs.oracle.com . Получено 10.12.2021 .
  3. ^ "Глава 7. Пакеты". Docs.oracle.com . Получено 2013-09-15 .
  4. ^ «Создание и использование пакетов (Учебники Java™ > Изучение языка Java > Пакеты)». docs.oracle.com .
  5. ^ «Управление доступом к членам класса (Учебники Java™ > Изучение языка Java > Классы и объекты)». docs.oracle.com .
  6. ^ Соглашения о коде для языка программирования Java: 9. Соглашения об именовании
  7. ^ "Пакеты". docs.oracle.com .
  8. ^ "JDK Module Summary". Oracle Corporation . 2015-10-23. Архивировано из оригинала 2015-12-08 . Получено 2015-11-29 .
  9. ^ "Понимание модулей Java 9". Oracle Corporation . 1 октября 2017 г. Получено 2022-10-04 .

Внешние ссылки