Package java что это
Как правило, в Java классы объединяются в пакеты. Пакеты позволяют организовать классы логически в наборы. По умолчанию java уже имеет ряд встроенных пакетов, например, java.lang , java.util , java.io и т.д. Кроме того, пакеты могут иметь вложенные пакеты.
Организация классов в виде пакетов позволяет избежать конфликта имен между классами. Ведь нередки ситуации, когда разработчики называют свои классы одинаковыми именами. Принадлежность к пакету позволяет гарантировать однозначность имен.
Чтобы указать, что класс принадлежит определенному пакету, надо использовать директиву package , после которой указывается имя пакета:
package название_пакета;
Как правило, названия пакетов соответствуют физической структуре проекта, то есть организации каталогов, в которых находятся файлы с исходным кодом. А путь к файлам внутри проекта соответствует названию пакета этих файлов. Например, если классы принадлежат пакету mypack, то эти классы помещаются в проекте в папку mypack.
Классы необязательно определять в пакеты. Если для класса пакет не определен, то считается, что данный класс находится в пакете по умолчанию, который не имеет имени.
Например, создадим в папке для исходных файлов каталог study . В нем создадим файл Program.java со следующим кодом:
package study; public class Program < public static void main(String[] args) < Person kate = new Person("Kate", 32); kate.displayInfo(); >> class Person < String name; int age; Person(String name, int age)< this.name = name; this.age = age; >void displayInfo() < System.out.printf("Name: %s \t Age: %d \n", name, age); >>
Директива package study в начале файла указывает, что классы Program и Person, которые здесь определены, принадлежат пакету study.
Когда мы работаем в среде разработки, например, в Netbeans, то IDE берет на себя все вопросы компиляции пакетов и входящих в них файлов. Соответственно нам достаточно нажать на кнопку, и все будет готово. Однако если мы компилируем программу в командной строке, то мы можем столкнуться с некоторыми трудностями. Поэтому рассмотрим этот аспект.
Для компиляции программы вначале в командной строке/терминале с помощью команды cd перейдем к папке, где находится каталог study.
cd C:\java
Например, в моем случае это каталог C:\java (то есть файл с исходным кодом расположен по пути C:\java\study\Program.java).
Для компиляции выполним команду
javac study\Program.java
После этого в папке study появятся скомпилированные файлы Program.class и Person.class. Для запуска программы выполним команду:
java study.Program
Импорт пакетов и классов
Если нам надо использовать классы из других пакетов, то нам надо подключить эти пакеты и классы. Исключение составляют классы из пакета java.lang (например, String ), которые подключаются в программу автоматически.
Например, знакомый по прошлым темам класс Scanner находится в пакете java.util , поэтому мы можем получить к нему доступ следующим способом:
java.util.Scanner in = new java.util.Scanner(System.in);
То есть мы указываем полный путь к файлу в пакете при создании его объекта. Однако такое нагромождение имен пакетов не всегда удобно, и в качестве альтернативы мы можем импортировать пакеты и классы в проект с помощью директивы import , которая указывается после директивы package:
package study; import java.util.Scanner; // импорт класса Scanner public class Program < 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 . И если нам надо одновременно использовать два этих класса, то необходимо указывать полный путь к этим классам в пакете:
java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date();
Статический импорт
В java есть также особая форма импорта — статический импорт. Для этого вместе с директивой import используется модификатор static :
package study; import static java.lang.System.*; import static java.lang.Math.*; public class Program < public static void main(String[] args) < double result = sqrt(20); out.println(result); >>
Здесь происходит статический импорт классов System и Math. Эти классы имеют статические методы. Благодаря операции статического импорта мы можем использовать эти методы без названия класса. Например, писать не Math.sqrt(20) , а sqrt(20) , так как функция sqrt() , которая возвращает квадратный корень числа, является статической. (Позже мы рассмотрим статические члены класса).
То же самое в отношении класса System: в нем определен статический объект out , поэтому мы можем его использовать без указания класса.
Что такое библиотеки классов Java?

В этой статье мы очень обзорно познакомимся с такими понятиями:
- библиотеки классов Java
- пакеты в Java
- классы
- методы
В обычной жизни, если Вы пойдёте в библиотеку или книжный магазин, естественно, Вы там увидите огромное количество книг, которые отвечают на самые разные вопросы: по истории, математике, химии, социлогии и т.д. И не надо всё выдумывать с нуля — взял книгу и получил ответы/решения на многие вопросы.
Причём все книги разложены строго по полочкам:
- на этой полочке книги по алгебре
- на этой полочке книги по геометрии
- на этой полочке книги по матанализу
- и т.д.
Так вот в Java есть виртуальная библиотека протестированного кода — это уже готовые решения ко многим задачам, которые стоят перед программистами в их ежедневной работе. То есть бери код из библиотеки и используй. А это очень и очень экономит время программиста, потому что не надо писать абсолютно весь код с нуля.
В этой виртуальной библиотеке Java информация разбита по пакетам («packages») — это своеобразный аналог полочек в книжном магазине. В каждом пакете протестированный код по какому-то отдельно взятому направлению.
Например, есть такие пакеты:
- java.applet
- java.lang — это основной пакет языка Java
- java.util
- java.io
- java.net
- и т.д.
Если совсем любопытно, все пакеты Вы можете найти на сайте Oracle по ссылке: https://docs.oracle.com/javase/8/docs/api
Давайте посмотрим на схематическое изображение библиотеки в Java.

Как видите, слева изображены разные пакеты («packages»):
- java.applet
- java.lang
- java.util
- и т.д.
А что же в каждом пакете? В пакете лежат классы . Чтобы проиллюстрировать это, мы показали на примере пакета java.lang. Для примера на схеме изображён один из классов пакета java.lang — класс Math.
Детально что такое классы мы разберём в отдельной статье, когда мы с Вами дойдём до темы объектно-ориентированного программирования (ООП) в Java. А сейчас Вам будет достаточно понимать, что класс — это готовое решение, которое мы можем использовать при написании наших программ.
В классе есть методы (действия), которые мы можем выполнять с помощью класса. Например, в классе Math есть такие методы:
- sqrt () — выведение квадратного корня
- sin () — вычисление синуса угла
- cos () — вычисление косинуса угла
- и т.д.
То есть, если нам необходимо посчитать квадратный корень, нам не надо писать код, который пошагово программировал бы вычисление квадратного корня. А такой код бы потянул на очень и очень много строк кода. А мы просто берём из пакета java.lang класс Math, а в нём метод который нам нужен для вычисления квадратного корня sqrt () и всё — в одну строчку кода мы получим нужное нам решение.
Надеюсь, теперь Вам понятно, что такое библиотека в Java, какая у нее структура и что готовые решения из библиотеки очень экономят программистам драгоценное рабочее время.
Постепенно Вы познакомитесь с различными классами и их методами из библиотеки Java, и главное — как же их использовать в своём коде. А пока нам важно было очень обзорно понять данную тему. И данную миссию мы с Вами выполнили.
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Обучаем с нуля. Детальную информацию Вы можете найти у нас на сайте.
- ← Настройка программного окружения на Ubuntu
- Настройка программного окружения на Windows →
Пакеты в Java (Package). Как понимать и использовать?
Могу ли я использовать пакеты на локальной машине? Потому что как я понял, это возможно только на удленной. Я хочу так, например. C:\JavaProj\StackOF\src Там Main.java И: C:\JavaProj\StackOF\classes Там Classes.java В Classes.java прописать package JavaProj.StackOF.classes; А в Main.java import JavaProj.StackOF.classes.*; Заработает ли это или я в корне чего-то не понимаю?
Отслеживать
2,305 2 2 золотых знака 10 10 серебряных знаков 38 38 бронзовых знаков
задан 23 сен в 13:42
7 3 3 бронзовых знака
Заработает или нет — какая разница. Без кода это все равно понять нельзя.
23 сен в 14:23
Вы имеете в виду, что где-то на удалённой машине находятся «пакеты», и вы хотите их импортировать и использовать в своей программе на своём компьютере?
23 сен в 15:31
Нет, я имею совсем противоположное. Я хочу импортировать на своем компьютере из другой папки проекта.
23 сен в 15:37
Ну так, ещё проще. Вы тот проект, пакеты которого хотите использовать, соберите в jar-файл. Подключите его в classpath (среда разработки легко это делает) того проекта, в котором хотите использовать. И всё, готово.
23 сен в 15:43
У вас неправильные представления о структуре проекта в Java, см. Best practices структуры проекта. Директория src предназначена для исходного кода ( .java файлов), а директория classes — для скомпилированных .class файлов. Также названия пакетов принято писать строчными буквами.
23 сен в 20:01
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Пакеты — механизм языка. Работают они на любой машине, на которой стоит java.
Главное, чтобы вы всё правильно сделали:
- Каждый пакет — это папка. Имя пакета отсчитывается от корня проекта (но названия корневой директории в имени пакета нет!). То есть у вас корень проекта диск C:\ , а имена пакетов — JavaProj.StackOF.classes и JavaProj.StackOF.src .
- Если .java -файл лежит в каком-то пакете, то первая строка (не считая комментариев) должна содержать оператор package с названием пакета. То есть в Main.java вам тоже нужно прописать:
package JavaProj.StackOF.src;
import JavaProj.StackOF.classes.Classes;
Либо каждый раз прописывать полный путь от корня проекта, что не очень удобно:
JavaProj.StackOF.classes.Classes someObject = new JavaProj.StackOF.classes.Classes();
Насколько я понял, у вас проблема со вторым пунктом — вы не прописали package JavaProj.StackOF.src; в Main.java . Если же вы это сделали, и проблема в другом, то пожалуйста, дополните вопрос деталями.
29. Java – Пакеты
В Java пакеты (package) используются для предотвращения конфликтов с названиями, для контроля доступа, для облегчения поиска/нахождения и использования классов, интерфейсов, перечислений и аннотаций и т.д.
Пакеты можно определить как группировку связанных типов (классы, интерфейсы, перечисления и аннотации), предоставляющий защиту доступа и управление пространством имён.
Некоторые из существующих пакетов в Java:
- java.lang – связывает фундаментальные классы.
- java.io – классы для ввода и выводные функции связаны в этом пакете.
Программисты могут определять их пакеты для связывания групп классов/интерфейсов и т.д. Группировка связанных классов, реализованных вами, является хорошим практическим решением, т.к. программист сможет легко определить, что классы, интерфейсы, перечисления и аннотации связаны.
Так как пакет создаёт новое пространство имён, в нём не будет никаких конфликтов с именами в других пактах. Используя пакеты, легче предоставить управление доступом и легче найти связанные классы.
Создание пакета
Как создать пакет в Java? Во время создания пакета вы должны выбрать ему имя и включить оператор package вместе с этим именем поверх каждого исходного файла, который содержит классы, интерфейсы, перечисления и типы аннотаций, которые вы хотите включить в пакет.
Оператор package должен быть первой строкой в исходном файле. Может быть только один запрос package в каждом исходном файле, и он применяется ко всем типам в этом файле.
Если оператор package не использован, тогда классы, интерфейсы, перечисления и типы аннотаций будут помещены в текущий пакет по умолчанию.
Чтобы скомпилировать программы на Java с операторами package, то вам нужно использовать опцию –d, как показано ниже.
javac -d Destination_folder file_name.java
Затем в указанном месте назначения создается папка с указанным именем пакета, а файлы скомпилированных классов будут помещены в эту папку.
Пример 1
Давайте взглянем на пример, которые создаёт пакет под названием animals. Полезно использовать имена пакетов с маленькой буквы, чтобы избежать конфликтов с именами классов и интерфейсов.
В следующем примере пакета содержится интерфейс с названием animals.
/* File name : Animal.java */ package animals; interface Animal
Теперь давайте реализуем вышеприведённый интерфейс в этом же пакете animals:
package animals; /* File name : MammalInt.java */ public class MammalInt implements Animal < public void eat() < System.out.println("Млекопитающее кушает"); >public void travel() < System.out.println("Млекопитающее путешествует"); >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
Ключевое слово import
Если класс хочет использовать другой класс в том же пакете, то не нужно использовать имя пакета. Классы в одном пакете могут найти друг друга без особого синтаксиса.
Пример 2
Итак, класс под названием Boss добавлен в пакет payroll, который уже содержит Employee. Boss может обратиться к классу Employee без использования префикса payroll, как показано в следующем классе Boss.
package payroll; public class Boss < public void payEmployee(Employee e) < e.mailCheck(); >>
Что произойдёт, если класс Employee не будет включен в пакет payroll? Тогда класс Boss должен будет использовать одну из следующих техник для обращения к классу в другом пакете:
- Можно использовать полноценное имя класса. К примеру:
payroll.Employee
- Импорт пакета. В Java пакет может быть импортирован с помощью ключевого слова import и wild card. (*). Например:
import payroll.*;
- Сам класс можно импортировать с помощью ключевого слова import. Взглянем:
import payroll.Employee;
Примечание: Файл класса может содержать любое количество операторов импорта (import). Операторы импорта (import) должны появляться после оператора пакета (package) и перед объявлением класса.
Структура директории пакетов
Происходят два явления, когда класс помещён в пакет:
- Имя пакета в Java становится частью имени класса, как мы только что выяснили в прошлой секции.
- Имя пакета должно соответствовать со структурой директории, где находится соответствующий байт-код.
Есть лёгкий способ работы с вашими файлами в Java:
Поместите исходный код для класса, интерфейса, перечисления или типа аннотации в текстовый файл, имя которого является простым именем типа с расширением .java.
// File Name : Car.java package vehicle; public class Car < // Class implementation. >
Теперь поместите исходный файл в директорию, имя которой отражает имя пакета, к которому принадлежит класс:
. \vehicle\Car.java
Полноценное имя класса и пути будет выглядеть так:
- Имя класса – vehicle.Car
- Путь к файлу – vehicle\Car.java (в Windows)
В общем, компания использует своё обратное доменное имя в Интернете для своих именований пакетов в 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. Вы можете разделить директории для классов и источников вот так:
\sources\com\apple\computers\Dell.java \classes\com\apple\computers\Dell.class
Делая так, становится возможным предоставить доступ к директории классов другим программистам, не раскрывая ваши источники. Вам также нужно распределить файлы классов и источников таким образом, чтобы компилятор и Java Virtual Machine (JVM) могли найти все типы, которые использует ваша программа.
Полный путь к директории классов
\classes называется путь класса и устанавливается с системной переменной CLASSPATH. И компилятор, и JVM создают путь к вашим файлам .class, добавляя имя пакета к пути класса.
\classes – это путь класса, а имя пакета com.apple.computers, тогда компилятор и JVM будут искать файлы .class в
Путь класса может включать несколько путей. Множество путей должны быть отделены точкой с запятой (Windows) или двоеточием (Unix). По умолчанию компилятор и JVM ищут текущую директорию и JAR-файл, содержащий классы платформы Java, чтобы эти директории были автоматически включены в путь класса.
Установить системную переменную CLASSPATH
Чтобы отобразить текущую CLASSPATH переменную, используйте следующие команды в Windows и UNIX (Bourne shell):
- Для Windows – C:\> set CLASSPATH
- Для UNIX – % echo $CLASSPATH
Чтобы удалить содержимое переменной CLASSPATH, используйте:
- Для Windows – C:\> set CLASSPATH =
- Для UNIX – % unset CLASSPATH; export CLASSPATH
Чтобы установить системную переменную CLASSPATH:
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
