Paquetes integrados de Java
Recorrido por los paquetes integrados más usados de Java: java.lang, java.util, java.io, java.nio, java.net, java.time.
El JDK incluye una extensa biblioteca estándar organizada en cientos de paquetes. Durante los primeros meses estarás recurriendo siempre a los mismos: java.lang, java.util, java.io, java.nio, java.net, java.time, java.math. Este capítulo es un recorrido: para qué sirve cada uno, las clases principales que contiene y cuándo elegirlo frente a sus vecinos.
java.lang — el paquete que nunca importas
java.lang se importa automáticamente en cada archivo fuente. Todo lo que contiene está disponible por su nombre simple sin necesidad de ninguna línea import:
Object,Class,String,StringBuilder— los tipos que todo programa utiliza.Math—sqrt,min,max,random, las funciones trigonométricas.- Tipos envolventes —
Integer,Long,Double,Boolean,Character,Byte,Short. Thread,Runnable,ThreadLocal— las primitivas de concurrencia originales.System—out,err,currentTimeMillis(),getenv,exit.Throwable,Exception,RuntimeException,Error— toda la jerarquía de excepciones.Iterable,Comparable,CharSequence,AutoCloseable— interfaces en las que el propio lenguaje se apoya parafor-each, genéricos,try-with-resourcesy similares.
Si ves una clase usada sin un import, casi siempre proviene de aquí.
java.util — colecciones, utilidades y las antiguas clases de fecha
java.util es el paquete de uso diario. El framework de colecciones por sí solo es razón suficiente para conocerlo.
- Interfaces de colección:
Collection,List,Set,Map,Queue,Deque. - Implementaciones concretas:
ArrayList,LinkedList,HashMap,LinkedHashMap,TreeMap,HashSet,TreeSet,ArrayDeque. - Clases de utilidad:
Arrays(métodos para arrays),Collections(sort,unmodifiableList, ...),Objects(requireNonNull,hash). Optional— para tipos de retorno que "podrían no tener valor".Random,Scanner,UUID— utilidades comunes que verás en todas partes.- Las antiguas clases de fecha —
Date,Calendar,TimeZone. No las uses en código nuevo; utilizajava.timeen su lugar.
java.util también tiene subpaquetes importantes que conviene conocer:
java.util.concurrent—ConcurrentHashMap,ExecutorService,Future,CompletableFuture, la caja de herramientas de concurrencia moderna.java.util.stream— la APIStreampara pipelines de estilo funcional.java.util.function— interfaces funcionales:Function,Predicate,Supplier,Consumer, la familia utilizada por streams y lambdas.
java.io — streams clásicos
El paquete de I/O original, todavía en uso activo en todas partes aunque java.nio sea ahora el preferido para código nuevo.
- Byte streams:
InputStream,OutputStream,FileInputStream,FileOutputStream,BufferedInputStream,ByteArrayInputStream. - Character streams:
Reader,Writer,FileReader,FileWriter,BufferedReader,InputStreamReader,PrintWriter. File— la abstracción del sistema de archivos heredada.- Serialización:
Serializable,ObjectInputStream,ObjectOutputStream.
La separación entre byte streams (InputStream/OutputStream) y character streams (Reader/Writer) es intencional: bytes para datos binarios, caracteres para texto con una codificación conocida.
java.nio — I/O moderno y rutas
"NIO" originalmente significaba "new I/O"; hoy en día es simplemente el paquete de I/O recomendado.
java.nio.file.Path— el reemplazo moderno dejava.io.File.java.nio.file.Files— helpers directos:Files.readString,Files.write,Files.walk,Files.exists.java.nio.file.Paths— punto de entrada más antiguo;Path.of(...)hace lo mismo con menos código.- Buffers y canales:
ByteBuffer,FileChannel,SocketChannel— bloques de construcción de bajo nivel para I/O de alto rendimiento.
Para código nuevo que lea un archivo, usa Files.readString(Path.of(...)), no BufferedReader con try-with-resources.
java.net — redes
URLs, sockets y HTTP.
URL,URI— análisis y representación de direcciones.Socket,ServerSocket,DatagramSocket— TCP y UDP de bajo nivel.InetAddress— IPs y resolución de nombres de host.
Java 11 añadió java.net.http.HttpClient, un cliente HTTP moderno con soporte asíncrono integrado en el JDK. Para código nuevo que realice peticiones HTTP, ese es el punto de partida correcto; no se necesita ninguna biblioteca de terceros.
java.time — fechas y horas correctamente
Añadido en Java 8 para reemplazar la defectuosa API Date / Calendar.
LocalDate,LocalTime,LocalDateTime— valores de reloj de pared, sin zona horaria.ZonedDateTime,ZoneId— momentos con zona horaria.Instant— un punto en la línea de tiempo global; el tipo ideal para almacenar en bases de datos.Duration,Period— cantidades de tiempo (segundos frente a días/meses).DateTimeFormatter— análisis y formateo.
Todos los tipos de java.time son inmutables y thread-safe. Eso por sí solo es razón suficiente para migrar cualquier código que todavía use java.util.Date.
java.math — aritmética de precisión
Cuando double y long no son suficientes:
BigInteger— enteros de precisión arbitraria; sin desbordamiento.BigDecimal— aritmética decimal exacta con un modo de redondeo explícito; lo que necesitas para dinero.
MathContext y RoundingMode completan el paquete.
Otros que encontrarás
java.text— formateo más antiguo (NumberFormat,MessageFormat). Mayormente superado porjava.timeyString.format, pero todavía común en salidas localizadas.java.security— hashing, firma digital;MessageDigest,KeyStore,Signature.javax.crypto— cifrado simétrico y asimétrico.java.sql— API JDBC.javax.xml,org.w3c.dom,org.xml.sax— análisis de XML.
Los prefijos javax.* y org.* son históricos: javax fue originalmente para "extensiones" y los paquetes org.* provienen de organismos de estándares. Hoy son paquetes JDK normales como el resto.
Un ejemplo práctico
Este programa hace uso de java.util, java.util.stream, java.time y java.math en un solo lugar: una muestra de cómo se compone la biblioteca estándar.
Imprime:
4 Jan 2026 -> $33.49
17 Jan 2026 -> $12.00
first sale was 28 days before 1 Feb 2026Observa que los totales son exactos (BigDecimal no perdió ni un centavo), los días están agrupados en orden de calendario (el supplier TreeMap los ordenó) y la diferencia de fechas se calcula sin un solo cálculo manual de milisegundos. El mismo programa sería el doble de largo y más ruidoso con los equivalentes de Date/Calendar anteriores a Java 8 y double para el dinero. Elegir el paquete correcto es la mitad de la batalla.
Qué sigue
Ahora ya sabes qué hay en la biblioteca estándar. La última pieza de la historia de paquetes es cómo la JVM encuentra todas esas clases —las tuyas y las del JDK— en tiempo de compilación y ejecución. Continúa con el classpath de Java.