W3docs

Встроенные пакеты 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 — типы, с которыми работает каждая программа.
  • Mathsqrt, min, max, random, тригонометрические функции.
  • Типы-обёрткиInteger, Long, Double, Boolean, Character, Byte, Short.
  • Thread, Runnable, ThreadLocal — исходные примитивы параллельного программирования.
  • Systemout, 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.concurrentConcurrentHashMap, ExecutorService, Future, CompletableFuture — современный инструментарий параллельного программирования.
  • java.util.streamStream 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 — снимок того, как компонуется стандартная библиотека.

java— editable, runs on the server

Программа выводит:

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.

Практика

Практика
Новый проект на Java должен работать с ценами и датами. Какие пакеты следует использовать?
Новый проект на Java должен работать с ценами и датами. Какие пакеты следует использовать?
Was this page helpful?