Какие типы пакетов (packages) существуют в Java?

«Какие типы пакетов (packages) существуют в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java пакеты — это механизм организации классов в пространства имен. Формально типов пакетов не существует, но их можно классифицировать по происхождению и назначению:

1. Встроенные пакеты (Built-in Packages)

  • Часть Java API (JDK).
  • Примеры: java.lang (автоматически импортируется), java.util, java.io, java.net, java.sql.

2. Пользовательские пакеты (User-defined Packages)

  • Создаются разработчиком для структурирования своего кода.
  • Пример: com.company.project.module.
  • Объявляются в начале файла: package com.company.project;

3. Модули (начиная с Java 9)

  • Пакеты более высокого уровня, которые инкапсулируют пакеты и контролируют доступ.
  • Описываются в module-info.java.
  • Пример: module com.myapp { exports com.myapp.api; }

Практические аспекты:

  • Иерархия: Пакеты отражают структуру каталогов (например, com/company/project/).
  • Доступ: Классы с модификатором public доступны из других пакетов. Классы без модификатора (package-private) видны только внутри своего пакета.
  • Импорт: Для использования классов из других пакетов нужен import.
    import java.util.ArrayList;
    import java.util.*; // импорт всех классов (не рекомендуется)
  • Статический импорт: Позволяет импортировать статические члены класса.
    import static java.lang.Math.PI;