Что такое пакеты в программе Java

Обновлено: 05.07.2024

ПАКЕТ в Java — это набор классов, подпакетов и интерфейсов. Это помогает организовать ваши классы в структуру папок и упростить их поиск и использование. Что еще более важно, это помогает улучшить возможность повторного использования кода.

Каждый пакет в Java имеет свое уникальное имя, а его классы и интерфейсы организованы в отдельное пространство имен или группу имен.

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

Синтаксис:-

В следующем видео показаны этапы создания пакета.

Нажмите здесь, если видео недоступно

Давайте рассмотрим пакет на примере. Мы определяем класс и объект, а затем компилируем их в наш пакет p1. После компиляции мы выполняем код как пакет Java.

Как создать пакет?

Создание пакета — это простая задача, описанная ниже

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

Шаг 1) Рассмотрим следующую пакетную программу на Java:

Создание и использование пакета в Java

  1. Чтобы поместить класс в пакет, в первой строке кода определите пакет p1
  2. Создайте класс c1
  3. Определение метода m1, который печатает строку.
  4. Определение основного метода
  5. Создание объекта класса c1
  6. Вызов метода m1

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

Создание и использование пакета в Java

Создание и использование пакета в Java

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

Создание и использование пакета в Java

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

Создание и использование пакета в Java

Эта команда заставляет компилятор создать пакет.

«.» оператор представляет текущий рабочий каталог.

Создание и использование пакета в Java

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

Создание и использование пакета в Java

Шаг 6) Скомпилируйте тот же файл, используя следующий код

Здесь «..» указывает на родительский каталог. В нашем случае файл будет сохранен в родительском каталоге, то есть на диске С

Создание и использование пакета в Java

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

Создание и использование пакета в Java

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

Создание и использование пакета в Java

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

Создание и использование пакета в Java

Как видно на снимке экрана ниже, создается подпакет p2 с классом c1 внутри пакета.

Создание и использование пакета в Java

Шаг 9) Чтобы выполнить код, укажите полное имя класса, то есть имя пакета, за которым следует имя подпакета, за которым следует имя класса –

Создание и использование пакета в Java

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

Создание и использование пакета в Java

Как импортировать пакет

Чтобы создать объект класса (включенный в пакет), в коде необходимо использовать его полное имя.

Пример:

Но может оказаться утомительным вводить длинный путь к пакету, разделенный точками, для каждого класса, который вы хотите использовать. Вместо этого рекомендуется использовать оператор импорта.

Синтаксис

После импорта вы можете использовать класс, не упоминая его полное имя.

Шаг 1) Скопируйте код в редактор.

Шаг 2) Сохраните файл как Demo2.java. Скомпилируйте файл с помощью команды javac –d. Демо2.java

Шаг 3) Выполните код с помощью команды java p3.c3

Пакеты — обратите внимание:

  • Во избежание конфликтов имен пакетам присваиваются имена доменного имени компании в обратном порядке, например: com.guru99. com.microsoft, com.infosys и т. д.
  • Если имя пакета не указано, класс находится в пакете по умолчанию (текущий рабочий каталог), а сам пакет не имеет имени. Следовательно, вы могли выполнять задания раньше.
  • При создании пакета следует позаботиться о том, чтобы оператор для создания пакета был написан перед любыми другими операторами импорта.

пакет java.lang импортируется по умолчанию для любого класса, который вы создаете в Java.

Java API очень обширен, содержит классы, которые могут выполнять почти все ваши задачи программирования, от управления структурой данных до работы в сети. Чаще всего вы будете использовать файлы API в своем коде. Документацию по API можно посмотреть здесь.

Пакет в Java используется для группировки связанных классов. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы избежать конфликтов имен и написать более удобный для сопровождения код. Пакеты делятся на две категории:

  • Встроенные пакеты (пакеты из Java API)
  • Определяемые пользователем пакеты (создавайте собственные пакеты)

Встроенные пакеты

Java API – это бесплатная библиотека предварительно написанных классов, включенных в среду разработки Java.

Библиотека разделена на пакеты и классы. Это означает, что вы можете либо импортировать один класс (вместе с его методами и атрибутами), либо целый пакет, содержащий все классы, принадлежащие указанному пакету.

Чтобы использовать класс или пакет из библиотеки, необходимо использовать ключевое слово import:

Синтаксис

Импортировать класс

Если вы найдете класс, который хотите использовать, например класс Scanner, который используется для получения пользовательского ввода, напишите следующий код:

Пример

В приведенном выше примере java.util — это пакет, а Scanner — это класс пакета java.util.

Чтобы использовать класс Scanner, создайте объект класса и используйте любой из доступных методов, описанных в документации по классу Scanner. В нашем примере мы будем использовать метод nextLine(), который используется для чтения полной строки:

Пример

Использование класса Scanner для получения пользовательского ввода:

Импорт пакета

Есть множество пакетов на выбор. В предыдущем примере мы использовали класс Scanner из пакета java.util. Этот пакет также содержит функции даты и времени, генератор случайных чисел и другие служебные классы.

Чтобы импортировать весь пакет, завершите предложение знаком звездочки ( * ). В следующем примере будут импортированы ВСЕ классы из пакета java.util:

Пример

Пользовательские пакеты

Чтобы создать собственный пакет, необходимо понимать, что Java использует для их хранения каталог файловой системы. Так же, как папки на вашем компьютере:

Пример

Чтобы создать пакет, используйте ключевое слово package:

MyPackageClass.java

Сохраните файл как MyPackageClass.java и скомпилируйте его:

Затем скомпилируйте пакет:

Это заставляет компилятор создать пакет "mypack".

Ключевое слово -d указывает место назначения для сохранения файла класса. Вы можете использовать любое имя каталога, например c:/user (windows), или, если вы хотите сохранить пакет в том же каталоге, вы можете использовать знак точки ".", как в примере выше.

Примечание. Имя пакета должно быть написано строчными буквами, чтобы избежать конфликта с именами классов.

Когда мы компилировали пакет в приведенном выше примере, была создана новая папка с именем "mypack".

Все, что нам нужно сделать, это поместить связанные классы в пакеты. После этого мы можем просто написать класс импорта из существующих пакетов и использовать его в нашей программе. Пакет – это контейнер группы связанных классов, в котором некоторые классы доступны и открыты, а другие хранятся для внутренних целей.
Мы можем повторно использовать существующие классы из пакетов столько раз, сколько нам нужно в нашей программе. .

Как работают пакеты?

Имена пакетов и структура каталогов тесно связаны. Например, если имя пакета college.staff.cse, то есть три каталога: college, staff и cse таким образом, что cse присутствует в персонале, а персонал присутствует в колледже. Также каталог колледж доступен через переменную CLASSPATH, т.е. путь родительского каталога колледжа присутствует в CLASSPATH. Идея состоит в том, чтобы обеспечить простоту поиска классов.
Соглашение об именах пакетов. Пакеты именуются в порядке, обратном порядку имен доменов, т. е. org.geeksforgeeks.practice. Например, в колледже рекомендуемое соглашение: College.tech.cse, College.tech.ee, College.art.history и т. д.

Добавление класса в пакет. Мы можем добавить дополнительные классы в созданный пакет, указав имя пакета в верхней части программы и сохранив его в каталоге пакета. Нам нужен новый файл Java для определения общедоступного класса, в противном случае мы можем добавить новый класс в существующий файл .java и перекомпилировать его.

Подпакеты: пакеты, находящиеся внутри другого пакета, называются подпакетами. Они не импортируются по умолчанию, их нужно импортировать явно. Кроме того, члены подпакета не имеют прав доступа, т. е. они считаются разными пакетами для спецификаторов доступа protected и default.
Пример:

util — это подпакет, созданный внутри пакета java.

Доступ к классам внутри пакета

  • Первая инструкция используется для импорта класса Vector из пакета util, который содержится внутри java.
  • Второй оператор импортирует все классы из пакета util.


Типы пакетов:

Определенные пользователем пакеты
Это пакеты, определенные пользователем. Сначала мы создаем каталог myPackage (имя должно совпадать с именем пакета). Затем создайте MyClass внутри каталога с первым оператором, являющимся именами пакетов.

Теперь мы можем использовать класс MyClass в нашей программе.

Примечание. MyClass.java необходимо сохранить в каталоге myPackage, поскольку он является частью пакета.

Использование статического импорта

Статический импорт – это функция, представленная в языке программирования Java (версии 5 и выше), которая позволяет элементам (полям и методам), определенным в классе как общедоступные статические данные, использоваться в коде Java без указания класса, в котором определено поле. .
Следующая программа демонстрирует статический импорт:

Обработка конфликтов имен

Единственный раз, когда нам нужно обращать внимание на пакеты, это когда возникает конфликт имен. Например, оба пакета java.util и java.sql имеют класс с именем Date. Итак, если мы импортируем оба пакета в программу следующим образом:

Компилятор не сможет определить, какой класс Date нам нужен. Эту проблему можно решить с помощью специального оператора импорта:

Если нам нужны оба класса Date, нам нужно использовать полное имя пакета каждый раз, когда мы объявляем новый объект этого класса.
Например:

Структура каталогов

Имя пакета тесно связано со структурой каталогов, используемой для хранения классов. Классы (и другие объекты), принадлежащие определенному пакету, хранятся вместе в одном каталоге. Кроме того, они хранятся в структуре подкаталогов, определяемой именем пакета. Например, класс Circle пакета com.zzz.project1.subproject2 хранится как «$BASE_DIR\com\zzz\project1\subproject2\Circle.class», где $BASE_DIR обозначает базовый каталог пакета. Ясно, что «точка» в имени пакета соответствует подкаталогу файловой системы.

Базовый каталог ($BASE_DIR) может располагаться в любом месте файловой системы. Следовательно, компилятор Java и среда выполнения должны быть проинформированы о расположении $BASE_DIR, чтобы найти классы. Это достигается с помощью переменной среды с именем CLASSPATH. CLASSPATH похож на другую переменную среды PATH, которая используется командной оболочкой для поиска исполняемых программ.

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

В java у нас есть несколько встроенных пакетов, например, когда нам нужен пользовательский ввод, мы импортируем такой пакет:

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

Преимущества использования пакета в Java

Вот причины, по которым вам следует использовать пакеты в Java:

  • Повторное использование. При разработке проекта на Java мы часто чувствуем, что в нашем коде снова и снова приходится писать несколько вещей. Используя пакеты, вы можете создавать такие вещи в виде классов внутри пакета, и всякий раз, когда вам нужно выполнить ту же задачу, просто импортируйте этот пакет и используйте класс.
  • Лучшая организация. Опять же, в больших проектах Java, где у нас есть несколько сотен классов, всегда требуется группировать похожие типы классов в осмысленном имени пакета, чтобы вы могли лучше организовать свой проект и когда вам нужно что-то, что вам нужно. может быстро найти его и использовать, что повышает эффективность.
  • Конфликты имен: мы можем определить два класса с одинаковыми именами в разных пакетах, чтобы избежать конфликта имен, мы можем использовать пакеты

Типы пакетов в Java

Как упоминалось в начале этого руководства, у нас есть два типа пакетов в java.
1) Пользовательский пакет: Пакет, который мы создаем, называется пользовательским пакетом.
2) Встроенный пакет. Уже определенные пакеты, такие как java.io.*, java.lang.* и т. д., называются встроенными пакетами.

Мы уже обсуждали встроенные пакеты, давайте обсудим пользовательские пакеты с помощью примеров.

Пример 1: пакеты Java

Я создал класс Calculator внутри пакета с именем letmecalculate. Чтобы создать класс внутри пакета, объявите имя пакета в первом операторе вашей программы. Класс может иметь только одно объявление пакета.
Файл Calculator.java, созданный внутри пакета letmecalculate

Теперь давайте посмотрим, как использовать этот пакет в другой программе.

Чтобы использовать класс Calculator, я импортировал пакет letmecalculate. В приведенной выше программе я импортировал пакет как letmecalculate.Calculator , это импортирует только класс Calculator. Однако, если у вас есть несколько классов внутри пакета letmecalculate, вы можете импортировать пакет таким образом, чтобы использовать все классы этого пакета.

Пример 2. Создание класса внутри пакета при импорте другого пакета

Как мы видели, и объявление пакета, и импорт пакета должны быть первым оператором в вашей java-программе. Давайте посмотрим, в каком порядке мы создаем класс внутри пакета при импорте другого пакета.

Поэтому порядок в этом случае должен быть таким:
→ объявление пакета
→ импорт пакета

Пример 3. Использование полного имени при импорте класса

Вы можете использовать полное имя, чтобы избежать оператора импорта. Давайте посмотрим на пример, чтобы понять это:
Calculator.java

Пример.java

В классе Example вместо импорта пакета я использовал полное имя, такое как package_name.class_name, для создания его объекта. Вы также можете прочитать: статический импорт в Java

Подпакеты в Java

Пакет внутри другого пакета называется подпакетом. Например, если я создам пакет внутри пакета letmecalculate, он будет называться подпакетом.

Допустим, я создал еще один пакет внутри letmecalculate, и имя подпакета —multiple. Поэтому, если я создам класс в этом подпакете, он должен иметь это объявление пакета в начале:

Теперь, если мне нужно использовать этот класс Multiplication, я должен либо импортировать пакет следующим образом:

или я могу использовать полное имя, например:

Что нужно помнить:

<р>1. Иногда может возникнуть конфликт имен классов. Например: допустим, у нас есть два пакета abcpackage и xyzpackage, и оба пакета имеют класс с одинаковым именем, пусть это будет JavaExample.java. Теперь предположим, что класс импортирует оба этих пакета следующим образом:

Это вызовет ошибку компиляции. Чтобы избежать таких ошибок, вам нужно использовать метод полного имени, который я показал выше. Например

Таким образом, вы можете избежать операторов импорта пакета и избежать этой ошибки конфликта имен.

<р>2. Я уже обсуждал это выше, позвольте мне еще раз упомянуть здесь. Если мы создаем класс внутри пакета при импорте другого пакета, то объявление пакета должно быть первым оператором, за которым следует импорт пакета. Например:

<р>3. Класс может иметь только одно объявление пакета, но может иметь более одного оператора импорта пакета. Например:

<р>4. Подстановочный знак import, такой как package.*, следует использовать с осторожностью при работе с подпакетами. Например: Скажем: у нас есть пакет abc и внутри этого пакета у нас есть другой пакет foo, теперь foo является подпакетом.

Итак, если я импортирую пакет abc, используя подстановочный знак, например:

Тогда будут импортированы только классы Example1, Example2 и Example3, но не будут импортированы классы подпакета.

Чтобы импортировать классы подпакета, вам нужно импортировать следующим образом:

Это будет импортировать Demo1 и Demo2, но не будет импортировать Example1, Example2 и Example3.

Поэтому, чтобы импортировать все классы, присутствующие в пакете и подпакете, нам нужно использовать два оператора импорта, подобные этому:

Читайте также: