Добавление классов в пакеты Java

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

Если оператор package в исходном файле не указан, то классы, описанные в этом файле, помещаются в пакет по умолчанию. Пакет по умолчанию не имеет имени. До сих пор все рассмотренные нами классы принадлежали пакету по умолчанию. Пакеты следует помещать в подкаталог, путь к которому соответствует полному имени пакета. Например, все файлы классов в пакете com.projava.corejava должны находится в подкаталоге com/projava/corejava(соответственно com\projava\corejava в ОС Windows).

Компилятор помещает файлы классов в ту же структуру каталогов.

Программы, приведенные ниже, распределены по двум пакетам: класс PackageTest принадлежит пакету по умолчанию, а класс Employee — пакету com.projava.corejava. Следовательно, файл Employee.class должен содержаться в подкаталоге com/projava/corejava. Другими словами, структура каталогов должна выглядеть следующим образом:

Чтобы скомпилировать эту программу, перейдите в каталог, содержащий файл PackageTest.java, и выполните следующую команду:

Компилятор автоматически найдет файл com/projava/corejava/Employee.java и скомпилирует его.

Рассмотрим более реалистический пример. В данном примере пакет по умолчанию не используется, вместо этого классы распределены по разным пакетам(com.projava.corejava и com.mycompany).

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

Помните, что компилятор работает с файлами(при указании файла задается путь и расширение .java), а интерпретатор оперирует с классами(для класса указывается пакет).

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

Этот файл можно скомпилировать, даже если он не находится в каталоге com/mycompany. Исходный файл будет скомпилирован без ошибок, если он не зависит от других пакетов, однако при попытке выполнить эту программу виртуальная машина не найдет классы.