Учебники

Java — Пакеты

Пакеты используются в 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 —