Как создать пакет в Java?
1. Добавление класса в пакет
Обычно проект содержит большое количество классов и держать их в одном каталоге крайне неудобно. Кроме того, может возникнуть ситуация, когда два программиста создали класс с одинаковым названием. Для решения этих проблем в Java существует такой механизм как пакеты. Пакеты по своей сути очень похожи на каталоги файловой системы и должны совпадать с ней.
В следующем примере мы демонстрируем как добавить класс MyFirstApp
в пакет lesson1
.
Для добавления класса в пакет, используется оператор package, который задается всегда первой строкой в файле. А также этот класс должен находиться в одноименном нашему пакету каталоге - lesson1
. Вот и все.
package lesson1;
public class MyFirstApp {
public static void main(String[] args) throws Exception {
System.out.print("Hello world!!!");
}
}
Java также предоставляет возможность создания многоуровневого пакета. В этом примере мы добавляем класс MyFirstApp
в пакет com.examclouds.javabasics.lesson1
и соответственно в каталог com/examclouds/javabasics/lesson1
.
package com.examclouds.javabasics.lesson1;
public class MyFirstApp {
public static void main(String[] args) throws Exception {
System.out.print("Hello world!!!");
}
}
Существуют также правила для наименования пакетов. Для коммерческих проектов пакет должен начинаться с com, потом следует имя организации и название проекта. Потом пакеты обычно именуются по какому-то функциональному признаку. В примере 2 наименование пакета соответствует этому правилу.
Полное имя класса включает в себя название пакета. В примере 1 полное имя класса - lesson1.MyFirstApp
, а в примере 2 - com.examclouds.javabasics.lesson1.MyFirstApp
.
Кроме разделения пространств имен классов, пакеты также служат для управления доступностью объектов. В пакете можно определить классы, недоступные для кода за пределами этого пакета. В нем можно также определить члены класса, доступные только другим членам этого же пакета. Благодаря такому механизму классы могут располагать полными сведениями друг о друге, но не предоставлять эти сведения остальному миру.
2. Импорт пакетов
Хорошей практикой считается добавлять классы в пакеты. Но так как полное имя класса включает в себя имя пакета, в коде это может привести к достаточно длинным строкам, что крайне неудобно. Для решения этой проблемы в Java придуман такой механизм как импорт. Оператор import позволяет импортировать класс, после чего к нему можно обращаться просто по имени.
2.1. Использование класса из другого пакета
Рассмотрим пример, в котором имеется два класса находящихся в разных пакетах - first.Example1
и second.Example2
:
package first;
public class Example1 {
public static void main(String[] args) {
second.Example2 example2 = new second.Example2();
System.out.print("Done!");
}
}
package second;
public class Example2 {
}
Класс first.Example1
создает экземпляр объекта second.Example2
, указывая его полное имя. Очевидно, что указывать полное имя класса не очень удобно, особенно если класс находится в многоуровневом пакете.
2.2. Использование оператора import
Перепишем класс
используя оператор first.Example1
import
:
package first;
import second.Example2;
public class Example1 {
public static void main(String[] args) {
Example2 example2 = new Example2();
System.out.print("Done!");
}
}
В языке Java операторы import
всегда пишутся после оператора package
, и перед определением класса.
Разные варианты написания import:
import java.util.regex.Matcher;
import java.time.*;
Существует один пакет, классы которого импортируются в код по умолчанию. Это пакет jаva.lang, в котором находятся наиболее часто используемые классы.
Вы можете импортировать два пакета, в которых находятся классы с одинаковыми именами. Но обращаться к ним по короткому имени будет ошибкой - компилятор не сможет определить какой именно класс вам нужен. Поэтому к таким классам придется обращаться только по полному имени.
При импорте пакета, доступны только publiс
классы этого пакета. Например, в следующем примере класс MyClass
импортирует весь пакет p1
. Но ему будут доступен только AClass
. BClass
недоступен, так как он не public
.
package p1;
public class AClass {
}
class BClass {
}
package p2;
import p1.*;
public class MyClass {
public static void main(String[] args) {
AClass aClass = new AClass();
BClass bClass = new BClass(); //ошибка компиляции. Класс недоступен, т. к. он не public
}
}
Ключевые моменты:
- Используем оператор package для объявления пакета, который задается всегда первой строкой в файле.
- Если оператора package нет, то классы добавляются в пакет по умолчанию, у которого нет имени.
- Класс должен находиться в одноименном нашему пакету каталоге файловой системы.
- Можно (и нужно) создавать иерархию пакетов. Для разделения используется точка.
- Один пакет может содержать множество классов.
- Полное имя класса включает в себя название пакета.
- Пакеты служат и для управления доступностью объектов.
- В языке Java операторы import всегда пишутся после оператора package, и перед написанием класса.
- Классы пакета jаva.lang импортируются компилятором неявно.
Презентацию с видео можно скачать на Patreon.
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.