28. Java – Пакеты
В Java пакеты (package) используются для предотвращения конфликтов с названиями, для контроля доступа, для облегчения поиска/нахождения и использования классов, интерфейсов, перечислений и аннотаций и т.д.
Пакеты можно определить как группировку связанных типов (классы, интерфейсы, перечисления и аннотации), предоставляющий защиту доступа и управление пространством имён.
Содержание
Некоторые из существующих пакетов в Java:
Программисты могут определять их пакеты для связывания групп классов/интерфейсов и т.д. Группировка связанных классов, реализованных вами, является хорошим практическим решением, т.к. программист сможет легко определить, что классы, интерфейсы, перечисления и аннотации связаны.
Так как пакет создаёт новое пространство имён, в нём не будет никаких конфликтов с именами в других пактах. Используя пакеты, легче предоставить управление доступом и легче найти связанные классы.
Создание пакета
Как создать пакет в Java? Во время создания пакета вы должны выбрать ему имя и включить оператор package вместе с этим именем поверх каждого исходного файла, который содержит классы, интерфейсы, перечисления и типы аннотаций, которые вы хотите включить в пакет.
Оператор package должен быть первой строкой в исходном файле. Может быть только один запрос package в каждом исходном файле, и он применяется ко всем типам в этом файле.
Если оператор package не использован, тогда классы, интерфейсы, перечисления и типы аннотаций будут помещены в текущий пакет по умолчанию.
Чтобы скомпилировать программы на Java с операторами package, то вам нужно использовать опцию –d, как показано ниже.
Затем в указанном месте назначения создается папка с указанным именем пакета, а файлы скомпилированных классов будут помещены в эту папку.
Пример 1
Давайте взглянем на пример, которые создаёт пакет под названием animals. Полезно использовать имена пакетов с маленькой буквы, чтобы избежать конфликтов с именами классов и интерфейсов.
В следующем примере пакета содержится интерфейс с названием animals.
Теперь давайте реализуем вышеприведённый интерфейс в этом же пакете animals:
А сейчас скомпилируем java-файлы, как показано ниже:
Теперь пакет/папка с именем animals будет создана в текущей директории, и файлы классов будут помещены в неё.
Вы можете запустить файл класса внутри пакета и получить результат, указанный ниже.
Ключевое слово import
Если класс хочет использовать другой класс в том же пакете, то не нужно использовать имя пакета. Классы в одном пакете могут найти друг друга без особого синтаксиса.
Пример 2
Итак, класс под названием Boss добавлен в пакет payroll, который уже содержит Employee. Boss может обратиться к классу Employee без использования префикса payroll, как показано в следующем классе Boss.
Что произойдёт, если класс Employee не будет включен в пакет payroll? Тогда класс Boss должен будет использовать одну из следующих техник для обращения к классу в другом пакете:
Примечание: Файл класса может содержать любое количество операторов импорта (import). Операторы импорта (import) должны появляться после оператора пакета (package) и перед объявлением класса.
Структура директории пакетов
Происходят два явления, когда класс помещён в пакет:
Есть лёгкий способ работы с вашими файлами в Java:
Теперь поместите исходный файл в директорию, имя которой отражает имя пакета, к которому принадлежит класс:
Полноценное имя класса и пути будет выглядеть так:
В общем, компания использует своё обратное доменное имя в Интернете для своих именований пакетов в Java.
Например: доменное имя компании называется apple.com, тогда все имена их пакетов будут начинаться с com.apple. Каждый компонент имени пакета соответствует поддиректории.
Например: у компании есть пакет com.apple.computers, в котором содержится исходный файл Dell.java, тогда он содержится в серии поддиректорий, как указано здесь:
Теперь скомпилируйте это, используя опцию –d:
Файлы скомпилируются следующим образом:
Вы можете импортировать все классы и интерфейсы, определённые в \com\apple\computers\ вот так:
Делая так, становится возможным предоставить доступ к директории классов другим программистам, не раскрывая ваши источники. Вам также нужно распределить файлы классов и источников таким образом, чтобы компилятор и Java Virtual Machine (JVM) могли найти все типы, которые использует ваша программа.
Полный путь к директории классов
Путь класса может включать несколько путей. Множество путей должны быть отделены точкой с запятой (Windows) или двоеточием (Unix). По умолчанию компилятор и JVM ищут текущую директорию и JAR-файл, содержащий классы платформы Java, чтобы эти директории были автоматически включены в путь класса.
Установить системную переменную CLASSPATH
Чтобы отобразить текущую CLASSPATH переменную, используйте следующие команды в Windows и UNIX (Bourne shell):
Чтобы удалить содержимое переменной CLASSPATH, используйте:
Чтобы установить системную переменную CLASSPATH:
Блог только про Java
Учимся программировать на Java с нуля
Импорт пакетов в Java
Если вспомнить, что пакеты предлагают эффективный механизм изоляции различных классов друг от друга, то становится понятно, почему все встроенные классы Java хранятся в пакетах.
Ни один из основных классов Java не хранится в неименованном пакете, используемом по умолчанию. Все стандартные классы непременно хранятся в каком-нибудь именованном пакете.
А поскольку в самих пакетах классы должны полностью определяться по именам их пакетов, то длинное, разделяемое точками имя пути к пакету каждого используемого класса может оказаться слишком громоздким.
Следовательно, чтобы отдельные классы или весь пакет можно было сделать доступными, в Java внедрен оператор import.
После того как класс импортирован, на него можно ссылаться непосредственно, используя только его имя.
Оператор import служит только для удобства программирования и не является обязательным с формальной точки зрения для создания завершенной программы нa java.
Но если в прикладном коде приходится ссылаться на несколько десятков классов, то оператор import значительно сокращает объем вводимого исходного кода.
В исходном файле программы нa java операторы import должны следовать непосредственно за оператором package (если таковой имеется) и перед любыми определениями классов.
Оператор import имеет следующую общую форму:
Пакеты в Java 8
Пакеты позволяют организовать связанные между собой типы в отдельные пространства имён. Это позволяет типам (классам, интерфейсам и перечислениям) в разных пакетах иметь одинаковые имена, но при этом не порождать конфликтов и неопределённостей.
Чтобы указать пакет, к которому относится класс нужно использовать ключевое слово package в самом верху файла с классом. Пример:
Чтобы успешно запустить скомпилированный Main.class из примера выше нужно создать структуру каталогов, повторяющую структуру пакета:
Запускать нужно из каталога, в котором находится каталог «ru» (в случае Linux нужно использовать знак «/» вместо «\»):
Обратите внимание на используемое имя пакета: «ru.urvanov.javaexamples.packageexamples». Согласно соглашению о кодировании имена пакетам даются в соответствии с правилами:
| Имя домена | Префикс имени пакета |
|---|---|
| hyphenated-name.example.org | org.example.hyphenated_name |
| example.int | int_.example |
| 123name.example.com | com.example._123name |
Если же пакет не указывать, как это было сделано в «Введение в Java 8», то используется пакет по умолчанию. Пакет по умолчанию можно использовать только для очень простых проектов.
Обратиться к членам пакета внутри самого пакета можно по имени самого члена, имя пакета указывать не обязательно:
37) Пакеты Java
Что такое пакет в Java?
Пакет представляет собой набор связанных классов. Это помогает организовать ваши классы в структуру папок и упростить их поиск и использование. Что еще более важно, это помогает улучшить возможность повторного использования.
Каждый пакет в Java имеет свое уникальное имя и организует свои классы и интерфейсы в отдельное пространство имен или группу имен.
Хотя интерфейсы и классы с одним и тем же именем не могут появляться в одном и том же пакете, они могут появляться в разных пакетах. Это возможно, назначив отдельное пространство имен каждому пакету.
Синтаксис:-
В следующем видео вы узнаете, как создать пакет.
Нажмите здесь, если видео не доступно
Давайте изучим пакет с примером. Мы определяем класс и объект, а затем компилируем его в наш пакет p1. После компиляции мы выполняем код как пакет java.
Шаг 1) Рассмотрим следующий код,

Шаг 2) На следующем шаге сохраните этот файл как demo.java


Шаг 3) На этом этапе мы компилируем файл.

Компиляция завершена. Файл класса c1 создан. Тем не менее, пакет не создан? Следующий шаг имеет решение

Шаг 4) Теперь нам нужно создать пакет, используя команду
Эта команда заставляет компилятор создать пакет.
«» Оператор представляет текущий рабочий каталог.

Шаг 5) Когда вы выполняете код, он создает пакет p1. Когда вы откроете java-пакет p1 внутри, вы увидите файл c1.class.

Шаг 6) Скомпилируйте тот же файл, используя следующий код
Здесь «..» указывает родительский каталог. В нашем случае файл будет сохранен в родительском каталоге C Drive

Файл сохраняется в родительском каталоге при выполнении вышеуказанного кода.

Шаг 7) Теперь предположим, что вы хотите создать подпакет p2 в нашем существующем java-пакете p1. Затем мы изменим наш код как

Шаг 8) Скомпилируйте файл

Как видно на скриншоте ниже, он создает подпакет p2, имеющий класс c1 внутри пакета.

Шаг 9) Для выполнения кода укажите полное имя класса, т.е. имя пакета, за которым следует имя подпакета, за которым следует имя класса —

Вот как выполняется пакет и выдает вывод «m1 of c1» из файла кода.

Импорт пакетов
Чтобы создать объект класса (связанный в пакете), в вашем коде вы должны использовать его полное имя.
Пример:
Но может оказаться утомительным вводить длинное имя пути пакета, разделенное точкой, для каждого класса, который вы хотите использовать. Вместо этого рекомендуется использовать оператор импорта.
Синтаксис
После импорта вы можете использовать класс, не упоминая его полное имя.
Пример : для импорта пакета
Шаг 1) Скопируйте код в редактор.
Шаг 2) Сохраните файл как Demo2.java. Скомпилируйте файл с помощью команды javac –d. Demo2.java
Шаг 3) Выполните код с помощью команды java p3.c3
Пакеты — указывает на заметку:
Java API очень обширный, содержит классы, которые могут выполнять практически все ваши задачи программирования, начиная с манипулирования структурой данных и заканчивая сетью. Чаще всего вы будете использовать файлы API в своем коде. Вы можете увидеть документацию по API здесь.
Руководство по пакетам Java
Узнайте больше о пакетах на Java
1. введение
В этом кратком руководстве мы рассмотрим основы работы с пакетами на Java. Мы увидим, как создавать пакеты и получать доступ к типам, которые мы помещаем в них.
Мы также обсудим соглашения об именах и то, как это связано с базовой структурой каталогов.
Наконец, мы скомпилируем и запустим наши упакованные классы Java.
2. Обзор пакетов Java
Основными преимуществами этого являются:
Далее давайте посмотрим, как мы можем создавать и использовать Java-пакеты.
3. Создание пакета
Давайте поместим тип в пакет с именем com.baeldung.packages :
Настоятельно рекомендуется помещать каждый новый тип в пакет. Если мы определяем типы и не помещаем их в пакет, они будут отправлены в default или безымянный пакет. Использование пакетов по умолчанию имеет несколько недостатков:
3.1. Соглашения об именовании
Чтобы избежать пакетов с одинаковыми именами, мы следуем некоторым соглашениям об именовании:
Чтобы определить имя пакета на основе организации, мы обычно начинаем с реверсирования URL-адреса компании. После этого соглашение об именовании определяется компанией и может включать названия подразделений и названия проектов.
Затем мы можем дополнительно определить подпакеты этого типа, такие как com.baeldung.packages или com.baeldung.packages.domain.
3.2. Структура каталогов
Пакеты в Java соответствуют структуре каталогов.
Большинство идей помогут создать эту структуру каталогов на основе наших имен пакетов, поэтому нам не нужно создавать их вручную.
4. Использование Членов Пакета
Начнем с определения класса TodoItem в подпакете с именем domain :
4.1. Импорт
Чтобы использовать наш класс TodoItem из класса в другом пакете, нам нужно импортировать его. Как только он будет импортирован, мы сможем получить к нему доступ по имени.
Мы можем импортировать один тип из пакета или использовать звездочку для импорта всех типов в пакете.
Давайте импортируем весь домен подпакет:
Теперь давайте импортируем только класс TodoItem :
JDK и другие библиотеки Java также поставляются со своими собственными пакетами. Мы можем импортировать уже существующие классы, которые мы хотим использовать в нашем проекте таким же образом.
Например, давайте импортируем Java core List interface и ArrayList class:
Затем мы можем использовать эти типы в нашем приложении, просто используя их имя:
Здесь мы использовали наши новые классы вместе с классами ядра Java, чтобы создать List of TodoItems.
4.2. Полное Наименование
Давайте использовать To do Item с полным именем:
5. Компиляция с помощью javac
Давайте начнем с открытия командной строки или терминала и перехода в наш исходный каталог.
Теперь давайте скомпилируем наш com.baeldung.packages.domain.TodoItem класс:
Теперь, когда наш класс TodoItem скомпилирован, мы можем скомпилировать наши классы ToDoList и TodoApp :
Давайте запустим наше приложение, используя полное имя нашего класса TodoApp :





