Пакеты классов, package
Пакет package позволяет логически объединить классы в наборы. Основные классы java входят в пакет java.lang. Различные вспомогательные классы располагаются в пакете в java.util. Классы для ввода и вывода входят в пакет java.io, а классы для работы в сети – в java.net. Некоторые их этих пакетов содержат подпакеты. Так, например, java.lang содержит два специализированных пакета java.lang.reflect и java.lang.ref, а java.util содержит подпакет java.util.zip, который включает классы для работы с ZIPархивами.
Каждый класс имеет как простое имя, данное ему в определении, так и полное имя, включающее имя пакета, в который он входит. Например, класс String является частью пакета java.lang, а его полное имя – java.lang.String.
Структура пакетов в точности отображает структуру файловой системы. Все файлы с исходными кодами (java-класс) и байт-кодами (расширением class), образующие один пакет, хранятся в одном каталоге файловой системы. Подпакеты образуют подкаталоги этого каталога. Каждый пакет создает единое пространство имен namespace. Это означает, что все имена классов и интерфейсов в пакете должны быть уникальны. Имена в разных пакетах могут совпадать, но это будут разные программные модули. Организация классов в виде пакетов позволяет избежать конфликта имен между классами. В пакете дублирование имен классов не допускается. Принадлежность класса к пакету позволяет гарантировать однозначность имен.
Чтобы указать, что класс принадлежит определенному пакету, следует использовать директиву package, после которой указывается наименование (путь) пакета :
package company.common; public class HelloWorld < public static void main(String[] args)< System.out.println ("Привет, мир!"); >>
В данном примере класс HelloWorld располагается в пакете company.common. Физически это директория «$/company/common». При создании класса в среде разработки IDE (например, Eclipse) следует указать наименование пакета, тогда IDE самостоятельно при необходимости создаст каталог на жестком диске и разместит новый класс в этом каталоге.
Можно package в классе не определять. В этом случае класс будет находиться в пакете по умолчанию, который не имеет имени «$», т.е. класс будет располагаться в корневой директории исходных кодов проекта.
Наименование пакета может быть любым, но необходимо соблюдать его уникальность в проекте. Соглашение «Code Conventions» рекомендует записывать имена пакетов строчными буквами. Тогда они не будут совпадать с именами классов, которые, по соглашению, начинаются с прописной буквы.
Стандартная библиотека Java API включает сотни классов. Каждый программист в ходе работы создает десятки своих классов. Множество классов быстро увеличивается. Java позволяет отдельные классы, решающие определенную задачу (или несколько задач), объединять в библиотеки классов в виде архивов jar. Но эти библиотеки классов, кроме стандартных, не являются частью языка java.
Импорт пакетов и классов, import
Для использования класса в приложении, его следует подключить. Так расположенный в пакете java.util класс Scanner можно подключить следующим способом :
java.util.Scanner in = new java.util.Scanner(System.in);
В этом примере при определении/создании нового объекта был указыван пакет (полный путь к файлу). Однако данный подход не всегда удобен, и в качестве альтернативы можно импортировать пакеты и классы в приложение с помощью директивы import, которая указывается после директивы package :
package company.common; import java.util.Scanner; public class HelloWorld < public static void main(String[] args)< Scanner in = new Scanner(System.in); >>
Директива import указывается в самом начале кода, после чего идет имя подключаемого класса (класс Scanner в примере).
В примере был подключен только один класс. Однако пакет java.util содержит большое количество разных классов. И чтобы не подключать по отдельности каждый класс, можно сразу подключить весь пакет :
import java.util.*; // импорт всех классов из пакета java.util
Теперь можно использовать любой класс из пакета java.util.
Возможна ситуация, когда используется два класса с одинаковым наименованием, но из разных пакетов. Это относится, например, к классам Date, которые имеются в пакете java.util и в пакете java.sql, или классам List пакетов java.util и java.awt. И если необходимо одновременно использовать оба эти класса, то необходимо указывать полный путь к классам в пакете :
java.util.Date udate = new java.util.Date(); java.sql.Date sdate = new java.sql.Date();
Следует сказать, что основные классы из пакета java.lang (например, String) подключаются автоматически и не требуют «импортирования».
Статический импорт классов, import static
В java можно использовать статический импорт. Для этого вместе с директивой import используется модификатор static :
package company.common; import static java.lang.Math.*; import static java.lang.System.*; public class HelloWorld < public static void main(String[] args) < double result = sqrt(20); out.println(result); >>
В примере определяется статический импорт классов System и Math, которые имеют статические методы. Определение статического импорта позволяет использовать статические методы без названия класса. В примере статическая функция sqrt(20) (можно и Math.sqrt(20)), возвращает квадратный корень числа. То же самое относится и к классу System, в котором определен статический объект out, поэтому можно его использовать без указания класса, если выполнен статический импорт класса System.
Пример использования классов разных пакетов
Рассмотрим простенький проект PackageExample, включающий 3 java-класса. Два java-класса располагаются в одном пакете «ru.java.online», а третий — в другом «ru.java.online.classes». Структура проекта представлена на следующем скриншоте:

Листинг базового класса, BaseClass.java
Базовый класс включает 2 поля (id, name) и методы get/set. В конструкторе значения полей инициализируется.
package ru.java.online; public class BaseClass < private String protected String name = null; public BaseClass() < this.id = "default"; this.name = "Наименование не определено"; >public String getId() < return id; >public void setId(String id) < this.id = id; >public String getName() < return name; >public void setName(String name) < this.name = name; >@Override public String toString() < return this.getClass().getName() + "\n\t"; > >
Переопределенная функция toString() возвращает наименование класса и значение полей.
Листинг наследника, Inheritor.java
Класс Inheritor.java наследует свойства базового класса BaseClass.java. Поскольку классы располаются в разных пакетах, то базовый класс необходимо импортировать.
package ru.java.online.classes; import ru.java.online.BaseClass; public class Inheritor extends BaseClass < public Inheritor() < this.name = "Наследник"; this.setId("Первый"); >>
Листинг основного класса, MainPackage.java
Основной класс включает статический метод main. Поскольку данный класс не «видит» наследника, то его приходится импортировать.
package ru.java.online; import ru.java.online.classes.Inheritor; public class MainPackage < public MainPackage() < BaseClass bc = new BaseClass(); Inheritor ir = new Inheritor(); System.out.println (bc.toString()); System.out.println (ir.toString()); >public static void main(String[] args) < new MainPackage(); System.exit(0); >>
Результат выполнения данной программы выводится в консоль в следующем виде :
ru.java.online.BaseClass: ru.java.online.classes.Inheritor:
Как видно по результату выполнения программы наименование класса включает пакет.
Говоря о полном наименовании класса следует отметить, что оно включает не только наименование пакета и наименование класса, но также и класс-загрузчик classloader. Подробно о классах-загрузчиках можно почитать здесь.
Пакеты — Основы Java
Реальные программы на Java состоят из сотен и тысяч классов. При таких размерах легко возникают ситуации, когда создаются классы с одинаковыми именами. Если два таких класса окажутся внутри одного проекта, то он перестанет компилироваться.
Для решения проблемы конфликта имен вводится система пакетов. Пакеты позволяют группировать похожие классы.
Определение пакетов
Структура пакетов тесно связана со структурой директорий. Как правило, структура пакетов соответствует файловой структуре директорий проекта, в которых находится файлы с исходным кодом. Например, если классы размещены в пакете example.package1 , то и файлы в проекте должны быть расположены в директории example/package1. Некоторые IDE, например популярная IntelliJ IDEA, при создании пакета автоматически создают соответствующую файловую структуру в директории проекта
Здесь имя User — это так называемое простое имя класса. А полным именем класса считается имя, состоящее из всех пакетов, перечисленных через точку, и простого имени класса. Например, полные имена для классов User будут такими: example.package1.User и example.package2.User . Теперь проблема одинаковых имён классов в большом проекте решена, так как в разных пакетах могут находиться классы с одинаковым простым именем
Для примера в пакете example.package1 создадим класс User , который будет описывать методы для работы с пользователем:
// Файл src/main/java/example/package1/User.java // Именовать пакет начинаем от директории src/main/java/, // в которой расположен корневой пакет package example.package1; class User public static String getGreeting(String userName) return "Hello, " + userName + "!"; > >
Используем этот класс в том же пакете:
// Файл src/main/java/example/package1/App.java // Класс расположен в том же пакете, что и класс User package example.package1; class App public static void main(String[] args) // Внутри своего пакета класс можно использовать, // обратившись к нему по простому имени var greeting = User.getGreeting("John"); System.out.println(greeting); // => Hello, John! > >
Внутри своего пакета можно обращаться к классу по его простому имени. Компилятор поймет, что мы хотим использовать класс User , расположенный в том же пакете. Но в разработке постоянно приходится использовать классы из других пакетов. Помимо разрешения конфликтов имен, пакеты выполняют еще одну функцию — контроль доступа.
Контроль доступа
По умолчанию все классы внутри пакета доступны только классам этого же пакета. Чтобы получить доступ к классу снаружи, из другого пакета, этот класс нужно сделать публичным. Вернемся к нашему примеру с пользователем и сделаем класс User в пакете example.package1 публичным
package example.package1; // К определению класса добавляем модификатор public // Теперь класс User становится публичным // и к нему можно обратиться из другого пакета public class User public static String getGreeting(String userName) return "Hello, " + userName + "!"; > >
Используем класс User в другом пакете. Чтобы использовать класс в другом пакете, нужно обратиться к нему по его полному имени, чтобы однозначно указать компилятору, какой именно класс мы хотим использовать:
// Файл src/main/java/example/App.java // Уже другой пакет package example; class App public static void main(String[] args) // Обращаемся по полному имена класса var greeting = example.package1.User.getGreeting("John"); System.out.println(greeting); // => Hello, John! > >
Постоянно писать полное имя класса может быть не удобно. На деле чаще всего поступают иначе. Чтобы каждый раз не писать полное имя класса, мы можем импортировать этот класс, после чего в коде можно будет обращаться к нему по простому имени. Чтобы импортировать класс, нужно использовать ключевое слово import , после которого указать полное имя класса, который мы хотим импортировать
package example; // Импортируем класс User из пакета example.package1 import example.package1.User; class App public static void main(String[] args) // Теперь класс можно использовать, обратившись к нему по простому имени var greeting = User.getGreeting("John"); System.out.println(greeting); // => Hello, John! > >
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Что такое package (пакеты) в Java
Допустим, необходимо создать класс с именем Applet. Такая ситуация, конечно, большая редкость, но ситуации бывают разные… Однако этот класс уже есть в библиотеке Java. Чтобы использовать оба класса под тем же именем, нужно поместить их в разные пакеты, а затем импортировать (т.е. вставить в ваш файл определения классов) один из них. Пакетом, таким образом, называется объединение классов.
Создать пакет очень просто: нужно в файл перед определением классов вставить следующую строку:
package ИмяПакета;
Пакеты должны располагаться в соответствующих директориях, т.е. файл пакета (с именем ИмяПакета) должен быть сохранен в папке ИмяПакета.
Пакеты могут быть вложенными (например, java.util, где java— главный пакет, autil — вложенный). Соответственно эти два пакета должны располагаться в каталоге j ava\util.
Создадим для примера пакет (листинг 6.1).
Листинг 6.1.
Пример создания пакета из двух классов
Мы создали пакет из двух классов.
Уровни доступа в пакетах такие:
1. Public — члены класса доступны из всех пакетов.
2. Protected— члены класса доступны всем подклассам и неподклассам из того же пакета.
3. Без модификатора — члены класса доступны только в этом пакете.
4. Private — члены класса доступны только в том же классе.
У классов могут быть два уровня доступа:
• public — класс доступен отовсюду;
• без модификатора — класс доступен только в этом пакете.
Чтобы использовать пакет, необходимо подключить его к коду (импортировать). Это делается следующим образом.
import ИмяПакета.ИмяКласса; import ИмяПакета.*;
В первом случае мы импортируем только один класс, а во втором — импортируем полный пакет. Предположим, нам нужно создать две переменные классов Date и Calendar. Вот как это будет выглядеть, если мы не импортируем пакет (листинг 6.2).
Листинг 6.2.
Создание двух переменных классов Date и Calendar
Теперь импортируем пакет java.util.
Листинг 6.3.
Импорт пакета java.util
Согласитесь, второй вариант короче. Теперь импортируем наш пакет fruits в программу (листинг 6.4).
Листинг 6.4.
Импорт пакета fruits в программу
Легко заметить, что работа с пакетами очень проста. Рассмотрим теперь стандартные пакеты языка Java.
Вам також може сподобатися

Архитектура андроид-приложений 0 8 582
Хороший доклад Сергея Рябова на конференции Mobius 2018 о том, как строить реактивные андроид-приложения

Документация по android 0 8 324
Перевод с сайта developer.android.com. Если не указано иное, этот контент распространяется под лицензией Creative
![[:ru]Защита андроид-приложения с помощью пинкода[:en]App lock library for Android[:]](https://www.fandroid.info/wp-content/uploads/2017/01/AppLocker-e1484226728739-330x140.png)
Уроки по android разработке на Java 0 1 611
[:ru]В этом видеоуроке реализуем блокировку приложения с помощью библиотеки AppLocker. Исходный код – ниже, под

Уроки по android разработке на Java 8 4 589
Продолжаем работать с меню андроид Как программно добавить или скрыть пункты в меню, как

Инструменты android разработчика 0 636
Как ускорить эмулятор AVD? как установить google Play на эмулятор Genymotion? Как подключить Google

Разработка игр для android 19 814
Здесь описывается, как создать проект LibGDX в среде разработки Eclipse. Смотрите также LibGDX: установка и
Коментарі: 1
Додати коментар Скасувати відповідь
Щоб відправити коментар вам необхідно авторизуватись.
Как классы располагаются в пакете java
Классы в Java могут быть организованы в пакеты packages , которые являются своего рода директориями для классов. Пакеты используются для группировки классов, которые связаны друг с другом по функциональности или своему назначению.
Для определения пакета необходимо добавить в начало файла с определением класса директиву package , например:
package com.example.myapp; public class MyClass // тело класса >
В этом примере класс MyClass определен в пакете com.example.myapp . Пакеты могут иметь иерархическую структуру, разделяясь символом точки, например com.example.myapp.utils
Если класс находится в пакете, то его полное имя состоит из имени пакета и имени класса, разделенных точкой, например com.example.myapp.MyClass . Для использования класса из другого пакета его необходимо импортировать с помощью директивы import .