Java - Пакеты
Пакеты используются в Java для предотвращения конфликтов имен, контроля доступа, упрощения поиска / поиска и использования классов, интерфейсов, перечислений и аннотаций и т. Д.
А Package может быть определена как группа связанных типов (классов, интерфейсов, перечислений и аннотаций), обеспечивающая защиту доступа и управление пространством имен.
Некоторые из существующих пакетов в Java -
java.lang - связывает фундаментальные классы
java.io - классы для ввода, функции вывода включены в этот пакет
Программисты могут определять свои собственные пакеты для объединения группы классов / интерфейсов и т. Д. Рекомендуется группировать связанные классы, реализованные вами, чтобы программист мог легко определить, связаны ли классы, интерфейсы, перечисления и аннотации.
Поскольку пакет создает новое пространство имен, не будет конфликтов имен с именами в других пакетах. Используя пакеты, легче обеспечить контроль доступа, а также легче найти связанные классы.
Создание пакета
При создании пакета вы должны выбрать имя для пакета и включить package вместе с этим именем вверху каждого исходного файла, содержащего классы, интерфейсы, перечисления и типы аннотаций, которые вы хотите включить в пакет.
Оператор пакета должен быть первой строкой в исходном файле. В каждом исходном файле может быть только один оператор пакета, и он применяется ко всем типам в файле.
Если оператор пакета не используется, тогда класс, интерфейсы, перечисления и типы аннотаций будут помещены в текущий пакет по умолчанию.
Чтобы скомпилировать программы Java с операторами пакета, вы должны использовать параметр -d, как показано ниже.
javac -d Destination_folder file_name.java
Затем в указанном месте назначения создается папка с указанным именем пакета, и скомпилированные файлы классов будут помещены в эту папку.
пример
Давайте посмотрим на пример, который создает пакет с именем animals. Рекомендуется использовать имена пакетов со строчными буквами, чтобы избежать конфликтов с именами классов и интерфейсов.
Следующий пример пакета содержит интерфейс с именем animals -
/* File name : Animal.java */
package animals;
interface Animal {
public void eat();
public void travel();
}
Теперь давайте реализуем вышеуказанный интерфейс в том же пакете animals -
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
Теперь пакет / папка с названием animals будет создан в текущем каталоге, и эти файлы классов будут помещены в него, как показано ниже.
Вы можете выполнить файл класса внутри пакета и получить результат, как показано ниже.
Mammal eats
Mammal travels
Ключевое слово импорта
Если класс хочет использовать другой класс в том же пакете, имя пакета использовать не нужно. Классы в одном пакете находят друг друга без специального синтаксиса.
пример
Здесь класс с именем Boss добавляется к пакету расчета заработной платы, который уже содержит Employee. Затем Boss может ссылаться на класс Employee без использования префикса заработной платы, как показано в следующем классе Boss.
package payroll;
public class Boss {
public void payEmployee(Employee e) {
e.mailCheck();
}
}
Что произойдет, если класса Employee нет в пакете расчета заработной платы? Затем класс Boss должен использовать один из следующих методов для ссылки на класс в другом пакете.
- Можно использовать полное имя класса. Например -
payroll.Employee
Пакет можно импортировать с помощью ключевого слова import и символа подстановки (*). Например -
import payroll.*;
- Сам класс можно импортировать с помощью ключевого слова import. Например -
import payroll.Employee;
Note- Файл класса может содержать любое количество операторов импорта. Операторы импорта должны появляться после оператора пакета и перед объявлением класса.
Структура каталогов пакетов
Когда класс помещается в пакет, возникают два основных результата:
Имя пакета становится частью имени класса, как мы только что обсуждали в предыдущем разделе.
Имя пакета должно соответствовать структуре каталогов, в которой находится соответствующий байт-код.
Вот простой способ управления вашими файлами на Java -
Поместите исходный код для типа класса, интерфейса, перечисления или аннотации в текстовый файл, имя которого является простым именем типа, а расширение - .java.
Например -
// File Name : Car.java
package vehicle;
public class Car {
// Class implementation.
}
Теперь поместите исходный файл в каталог, имя которого отражает имя пакета, которому принадлежит класс -
....\vehicle\Car.java
Теперь квалифицированное имя класса и путь будут следующими:
- Название класса → vehicle.Car
- Имя пути → vehicle \ Car.java (в windows)
Как правило, компания использует свое перевернутое доменное имя в Интернете для имен своих пакетов.
Example- Интернет-доменное имя компании - apple.com, тогда все имена ее пакетов будут начинаться с com.apple. Каждый компонент имени пакета соответствует подкаталогу.
Example - У компании был пакет 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) могли найти все типы, которые использует ваша программа.
Полный путь к каталогу классов, <path-two> \ classes, называется путем к классам и устанавливается с помощью системной переменной CLASSPATH. И компилятор, и JVM создают путь к вашим файлам .class, добавляя имя пакета к пути к классу.
Скажем, <path-two> \ 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 →% unset CLASSPATH; экспорт КЛАССА
Чтобы установить переменную CLASSPATH -
- В Windows → установите CLASSPATH = C: \ users \ jack \ java \ classes
- В UNIX →% CLASSPATH = / home / jack / java / classes; экспорт КЛАССА