Программисты - это организованная группа, когда дело доходит до написания кода. Им нравится организовывать свои программы так, чтобы они выполнялись логически, вызывая отдельные блоки кода, каждый из которых выполняет определенную работу. Организация классов, которые они пишут, осуществляется путем создания пакетов.
Пакет позволяет разработчику группировать классы (и интерфейсы) вместе. Эти классы будут связаны каким-либо образом - все они могут быть связаны с конкретным приложением или выполнять определенный набор задач. Например, Джава API полон пакетов. Одним из них является пакет javax.xml. Он и его подпакеты содержат все классы в Java API для обработки XML.
Чтобы сгруппировать классы в пакет, каждый класс должен иметь оператор пакета, определенный в верхней части его.Java-файл. Это позволяет компилятору знать, к какому пакету принадлежит класс, и должно быть первой строкой кода. Например, представьте, что вы делаете простую игру «Морской бой». Имеет смысл поместить все необходимые классы в пакет, называемый линкорами:
Здесь хранятся все классы, принадлежащие этому пакету. Например, если пакет линейных кораблей содержит классы GameBoard, Ship, ClientGUI, тогда будут файлы с именами GameBoard.java, Ship.java и ClientGUI.java, хранящиеся в вызове каталога линкоров.
Например, имя пакета javax.xml показывает, что XML является подпакетом пакета javax. На этом все не заканчивается, в XML есть 11 подпакетов: bind, crypto, datatype, пространство имен, парсеры, soap, stream, transform, validation, ws и XPath.
Каталоги в файловой системе должны соответствовать иерархии пакетов. Например, классы в пакете javax.xml.crypto будут находиться в структуре каталогов.. \ javax \ xml \ crypto.
Но, что касается компилятора, каждый пакет представляет собой отдельный набор классов. Он не рассматривает класс в подпакете как часть его родительского пакета. Это различие становится более очевидным, когда речь идет об использовании пакетов.
В софтверных компаниях и крупных проектах, где пакеты могут быть импортированы в другие классы, имена должны быть отличительными. Если два разных пакета содержат класс с одним и тем же именем, важно, чтобы не было конфликта имен. Это достигается за счет того, что имена пакетов отличаются, начиная имя пакета с домена компании, прежде чем разделить на слои или функции: