Встроенные пакеты Java
Обзор наиболее используемых встроенных пакетов Java: java.lang, java.util, java.io, java.nio, java.net, java.time.
JDK поставляется с обширной стандартной библиотекой, организованной в сотни пакетов. В первые месяцы работы вы будете снова и снова обращаться к одним и тем же: java.lang, java.util, java.io, java.nio, java.net, java.time, java.math. Эта глава — обзор каждого из них: для чего он предназначен, какие ключевые классы в нём содержатся и когда использовать его, а не соседние пакеты.
java.lang — пакет, который не нужно импортировать
java.lang автоматически импортируется в каждый исходный файл. Всё, что в нём находится, доступно по простому имени без единой строки import:
Object,Class,String,StringBuilder— типы, с которыми работает каждая программа.Math—sqrt,min,max,random, тригонометрические функции.- Типы-обёртки —
Integer,Long,Double,Boolean,Character,Byte,Short. Thread,Runnable,ThreadLocal— исходные примитивы параллельного программирования.System—out,err,currentTimeMillis(),getenv,exit.Throwable,Exception,RuntimeException,Error— вся иерархия исключений.Iterable,Comparable,CharSequence,AutoCloseable— интерфейсы, на которые опирается сам язык дляfor-each, обобщений,try-with-resourcesи других конструкций.
Если вы видите класс без импорта, он почти наверняка из этого пакета.
java.util — коллекции, утилиты и устаревшие классы дат
java.util — пакет на каждый день. Одного фреймворка коллекций достаточно, чтобы его знать.
- Интерфейсы коллекций:
Collection,List,Set,Map,Queue,Deque. - Конкретные реализации:
ArrayList,LinkedList,HashMap,LinkedHashMap,TreeMap,HashSet,TreeSet,ArrayDeque. - Вспомогательные классы:
Arrays(методы для массивов),Collections(sort,unmodifiableList, ...),Objects(requireNonNull,hash). Optional— для возвращаемых типов, у которых «значения может не быть».Random,Scanner,UUID— повсеместно используемые утилиты.- Устаревшие классы дат —
Date,Calendar,TimeZone. Не используйте их в новом коде; вместо них применяйтеjava.time.
В java.util также есть важные подпакеты, о которых стоит знать:
java.util.concurrent—ConcurrentHashMap,ExecutorService,Future,CompletableFuture— современный инструментарий параллельного программирования.java.util.stream— Stream API для конвейерной обработки в функциональном стиле.java.util.function— функциональные интерфейсы:Function,Predicate,Supplier,Consumer— семейство, используемое потоками и лямбда-выражениями.
java.io — классические потоки ввода-вывода
Исходный пакет ввода-вывода, по-прежнему активно используемый повсеместно, хотя для нового кода теперь предпочтителен java.nio.
- Байтовые потоки:
InputStream,OutputStream,FileInputStream,FileOutputStream,BufferedInputStream,ByteArrayInputStream. - Символьные потоки:
Reader,Writer,FileReader,FileWriter,BufferedReader,InputStreamReader,PrintWriter. File— устаревшая абстракция файловой системы.- Сериализация:
Serializable,ObjectInputStream,ObjectOutputStream.
Разделение между байтовыми потоками (InputStream/OutputStream) и символьными потоками (Reader/Writer) намеренное — байты для бинарных данных, символы для текста с известной кодировкой.
java.nio — современный ввод-вывод и пути
«NIO» первоначально означало «new I/O»; сегодня это просто рекомендуемый пакет ввода-вывода.
java.nio.file.Path— современная заменаjava.io.File.java.nio.file.Files— готовые вспомогательные методы:Files.readString,Files.write,Files.walk,Files.exists.java.nio.file.Paths— устаревшая точка входа;Path.of(...)делает то же самое с меньшим количеством кода.- Буферы и каналы:
ByteBuffer,FileChannel,SocketChannel— низкоуровневые строительные блоки для высокопроизводительного ввода-вывода.
Для чтения файла в новом коде используйте Files.readString(Path.of(...)), а не BufferedReader с try-with-resources.
java.net — сетевое взаимодействие
URL, сокеты и HTTP.
URL,URI— разбор и представление адресов.Socket,ServerSocket,DatagramSocket— низкоуровневые TCP и UDP.InetAddress— IP-адреса и разрешение имён хостов.
В Java 11 добавлен java.net.http.HttpClient — современный асинхронный HTTP-клиент, встроенный в JDK. Для нового кода, выполняющего HTTP-запросы, это правильная отправная точка — сторонние библиотеки не нужны.
java.time — правильная работа с датами и временем
Добавлен в Java 8 на замену сломанному API Date / Calendar.
LocalDate,LocalTime,LocalDateTime— значения настенных часов без часового пояса.ZonedDateTime,ZoneId— моменты с учётом часового пояса.Instant— точка на глобальной шкале времени; тип для хранения в базах данных.Duration,Period— промежутки времени (секунды против дней/месяцев).DateTimeFormatter— разбор и форматирование.
Все типы java.time являются неизменяемыми и потокобезопасными. Этого одного достаточно, чтобы перенести любой код, до сих пор использующий java.util.Date.
java.math — точная арифметика
Когда double и long недостаточно:
BigInteger— целые числа произвольной точности; без переполнения.BigDecimal— точная десятичная арифметика с явным режимом округления; то, что нужно для денежных расчётов.
MathContext и RoundingMode дополняют пакет.
Другие пакеты, с которыми вы встретитесь
java.text— устаревшее форматирование (NumberFormat,MessageFormat). В основном вытесненоjava.timeиString.format, но до сих пор встречается в локализованном выводе.java.security— хеширование, подписи;MessageDigest,KeyStore,Signature.javax.crypto— симметричное и асимметричное шифрование.java.sql— JDBC API.javax.xml,org.w3c.dom,org.xml.sax— разбор XML.
Префиксы javax.* и org.* исторические — javax изначально предназначался для «расширений», а пакеты org.* пришли из организаций по стандартизации. Сегодня это обычные пакеты JDK, как и все остальные.
Практический пример
Эта программа в одном месте использует java.util, java.util.stream, java.time и java.math — снимок того, как компонуется стандартная библиотека.
Программа выводит:
4 Jan 2026 -> $33.49
17 Jan 2026 -> $12.00
first sale was 28 days before 1 Feb 2026Обратите внимание: суммы точные (BigDecimal не потерял ни цента), дни сгруппированы в календарном порядке (поставщик TreeMap их отсортировал), а промежуток между датами вычислен без единого ручного расчёта в миллисекундах. Та же программа была бы вдвое длиннее и запутаннее с доявавосьмёрочными Date/Calendar и double для денег. Выбор правильного пакета — это уже половина победы.
Что дальше
Теперь вы знаете, что содержится в стандартной библиотеке. Последний элемент темы пакетов — то, как JVM фактически находит все эти классы — ваши и из JDK — во время компиляции и выполнения. Продолжайте изучение в разделе Java classpath.