Пакеты (packages) в Java используются для логической группировки классов, интерфейсов и под-пакетов. Это помогает структурировать крупные проекты, улучшить читаемость и повторное использование кода.
Основные функции пакетов:
Создание и использование пакета:
package com.example.utils; public class MathUtils { public static int sum(int a, int b) { return a + b; } }
Чтобы использовать класс из другого пакета:
import com.example.utils.MathUtils; public class Test { public static void main(String[] args) { System.out.println(MathUtils.sum(5, 7)); } }
Можно ли определить пакет в середине файла Java-класса или в не первой строке?
Ответ: Нет, директива package должна быть первой (непустой) строкой исходного файла Java.
// Некорректно! import java.util.*; package com.example; // Ошибка компиляции public class MyClass {}
История
На реальном проекте забыли указать директиву
packageв начале файла. После компиляции класс оказался в default-пакете, что привело к конфликтам с одноименными классами из других библиотек. В результате возникли ошибки типизации и проблемы при сборке JAR-файла.
История
В крупной команде при работе с несколькими пакетами (например, com.example и com.Example) возникла проблема несовместимости между Linux и Windows – Windows игнорирует регистр букв в путях, Linux — нет. Это вызвало неожиданные ошибки на продакшене после деплоя на сервер с Linux.
История
Разработчик случайно дал классу
protected-доступ к важным методам, думая, что их не смогут видеть извне, но не учёл, что классы внутри одного пакета могут обращаться к этим членам. Это вызвало утечку внутренней бизнес-логики через API, не предназначенный для внешнего использования.