Пакеты используются в Java для предотвращения конфликтов имен, для контроля доступа, для упрощения поиска / размещения и использования классов, интерфейсов, перечислений и аннотаций и т. Д.
Пакет может быть определен как группа связанных типов (классы, интерфейсы, перечисления и аннотации), обеспечивающие защиту доступа и управление пространством имен.
Некоторые из существующих пакетов в Java:
-
java.lang — связывает фундаментальные классы
-
java.io — классы для ввода, функции вывода включены в этот пакет
java.lang — связывает фундаментальные классы
java.io — классы для ввода, функции вывода включены в этот пакет
Программисты могут определять свои собственные пакеты для объединения групп классов / интерфейсов и т. Д. Рекомендуется группировать связанные классы, реализованные вами, чтобы программист мог легко определить, что классы, интерфейсы, перечисления и аннотации связаны между собой.
Поскольку пакет создает новое пространство имен, не будет никаких конфликтов имен с именами в других пакетах. Используя пакеты, легче обеспечить контроль доступа, а также легче найти связанные классы.
Создание пакета
При создании пакета вы должны выбрать имя для пакета и включить инструкцию пакета вместе с этим именем в верхней части каждого исходного файла, который содержит классы, интерфейсы, перечисления и типы аннотаций, которые вы хотите включить в пакет.
Инструкция пакета должна быть первой строкой в исходном файле. В каждом исходном файле может быть только один оператор пакета, и он применяется ко всем типам в файле.
Если оператор пакета не используется, класс, интерфейсы, перечисления и типы аннотаций будут помещены в текущий пакет по умолчанию.
Для компиляции программ Java с помощью операторов пакета вы должны использовать опцию -d, как показано ниже.
javac -d Destination_folder file_name.java
Затем в указанном месте назначения создается папка с заданным именем пакета, и скомпилированные файлы классов будут помещены в эту папку.
пример
Давайте посмотрим на пример, который создает пакет под названием животных . Рекомендуется использовать имена пакетов с строчными буквами, чтобы избежать конфликтов с именами классов и интерфейсов.
Следующий пример пакета содержит интерфейс с именем animals —
/* File name : Animal.java */ package animals; interface Animal { public void eat(); public void travel(); }
Теперь давайте реализуем вышеуказанный интерфейс в том же пакете животных —
package animals; /* File name : MammalInt.java */ public class MammalInt implements Animal { public void eat() { System.out.println("Mammal eats"); } public void travel() { System.out.println("Mammal travels"); } public int noOfLegs() { return 0; } public static void main(String args[]) { MammalInt m = new MammalInt(); m.eat(); m.travel(); } }
Теперь скомпилируйте Java-файлы, как показано ниже —
$ javac -d . Animal.java $ javac -d . MammalInt.java
Теперь пакет / папка с именем животных будет создан в текущем каталоге, и эти файлы классов будут размещены в нем, как показано ниже.
Вы можете выполнить файл класса в пакете и получить результат, как показано ниже.
Mammal eats Mammal travels
Ключевое слово импорта
Если класс хочет использовать другой класс в том же пакете, имя пакета не нужно использовать. Классы в одном пакете находят друг друга без какого-либо специального синтаксиса.
пример
Здесь класс с именем Boss добавляется к пакету заработной платы, который уже содержит Employee. Затем босс может ссылаться на класс Employee без использования префикса начисления заработной платы, как демонстрирует следующий класс Boss.
package payroll; public class Boss { public void payEmployee(Employee e) { e.mailCheck(); } }
Что произойдет, если класс Employee отсутствует в пакете заработной платы? Класс Boss должен затем использовать один из следующих методов для ссылки на класс в другом пакете.
- Полное имя класса может быть использовано. Например —
payroll.Employee
-
Пакет можно импортировать с помощью ключевого слова import и подстановочного знака (*). Например —
Пакет можно импортировать с помощью ключевого слова import и подстановочного знака (*). Например —
import payroll.*;
- Сам класс может быть импортирован с помощью ключевого слова import. Например —
import payroll.Employee;
Примечание . Файл класса может содержать любое количество операторов импорта. Операторы импорта должны появляться после оператора пакета и перед объявлением класса.
Структура каталогов пакетов
Два основных результата возникают, когда класс помещается в пакет.
-
Имя пакета становится частью имени класса, как мы только что обсуждали в предыдущем разделе.
-
Имя пакета должно соответствовать структуре каталогов, в которой находится соответствующий байт-код.
Имя пакета становится частью имени класса, как мы только что обсуждали в предыдущем разделе.
Имя пакета должно соответствовать структуре каталогов, в которой находится соответствующий байт-код.
Вот простой способ управления вашими файлами в Java —
Поместите исходный код для класса, интерфейса, перечисления или типа аннотации в текстовый файл, имя которого является простым именем типа, а расширение — .java .
Например —
// File Name : Car.java package vehicle; public class Car { // Class implementation. }
Теперь поместите исходный файл в каталог, имя которого отражает имя пакета, к которому принадлежит класс.
....\vehicle\Car.java
Теперь квалифицированное имя класса и путь будут выглядеть следующим образом:
- Название класса → vehicle.Car
- Имя пути → транспортное средство \ Car.java (в окнах)
Как правило, компания использует свое обратное доменное имя в Интернете для своих имен пакетов.
Пример . Интернет-домен компании называется apple.com, тогда все имена его пакетов начинаются с com.apple. Каждый компонент имени пакета соответствует подкаталогу.
Пример — у компании был пакет com.apple.computers, который содержал исходный файл Dell.java, он будет содержаться в ряде таких подкаталогов, как этот —
....\com\apple\computers\Dell.java
Во время компиляции компилятор создает разные выходные файлы для каждого класса, интерфейса и перечисления, определенных в нем. Базовое имя выходного файла — это имя типа, а его расширение — .class .
Например —
// File Name: Dell.java package com.apple.computers; public class Dell { } class Ups { }
Теперь скомпилируйте этот файл следующим образом, используя опцию -d —
$javac -d . Dell.java
Файлы будут скомпилированы следующим образом —
.\com\apple\computers\Dell.class .\com\apple\computers\Ups.class
Вы можете импортировать все классы или интерфейсы, определенные в \ com \ apple \ computers \, следующим образом:
import com.apple.computers.*;
Как и исходные файлы .java, скомпилированные файлы .class должны находиться в серии каталогов, отражающих имя пакета. Однако путь к файлам .class не обязательно должен совпадать с путем к исходным файлам .java. Вы можете расположить свои исходные и классные каталоги отдельно, так как —
<path-one>\sources\com\apple\computers\Dell.java <path-two>\classes\com\apple\computers\Dell.class
Делая это, можно предоставить доступ к каталогу классов другим программистам, не раскрывая ваши источники. Вам также необходимо управлять исходными файлами и файлами классов таким образом, чтобы компилятор и виртуальная машина Java (JVM) могли найти все типы, используемые вашей программой.
Полный путь к каталогу классов, <путь-два> \ classes, называется путем к классу и задается системной переменной CLASSPATH. И компилятор, и JVM создают путь к вашим файлам .class, добавляя имя пакета в путь к классу.
Скажите, что <путь-два> \ classes — это путь к классу, а имя пакета — com.apple.computers, тогда компилятор и JVM будут искать файлы .class в <path-two> \ classes \ com \ apple \ computers.
Путь к классу может включать несколько путей. Несколько путей должны быть разделены точкой с запятой (Windows) или двоеточием (Unix). По умолчанию компилятор и JVM ищут текущий каталог и файл JAR, содержащий классы платформы Java, так что эти каталоги автоматически находятся в пути к классам.
Задать системную переменную CLASSPATH
Чтобы отобразить текущую переменную CLASSPATH, используйте следующие команды в Windows и UNIX (оболочка Bourne) —
- В Windows → C: \> установить CLASSPATH
- В UNIX →% echo $ CLASSPATH
Чтобы удалить текущее содержимое переменной CLASSPATH, используйте —
- В Windows → C: \> установить CLASSPATH =
- В UNIX →% не установлено CLASSPATH; экспорт CLASSPATH
Чтобы установить переменную CLASSPATH —