Documentación
Java, de la fuente a la máquina
Cada capítulo se apoya en el anterior, pero puedes entrar por donde te haga falta. Lo que todavía no está escrito aparece marcado, nunca como un enlace roto.
Fundamentos
La JVM, los tipos y el control de flujo, desde un Hola, mundo.
- Hola, mundoTu primer programa: compilar con javac, ejecutar con java y seguir el rastro que deja en la máquina virtual.
- Tipos primitivosLos ocho tipos de Java, cuánto ocupan, hasta dónde llegan y por qué el dinero nunca va en un float.
- Variables y constantesDeclarar, nombrar y acotar valores: ámbito, final, var y la trampa de comparar cajas con dos iguales.
- Operadores y expresionesAritmética, comparación y lógica, con la precedencia y el desbordamiento a la vista.
- Control de flujoif, el switch moderno y los tres bucles, con las reglas que exige el compilador.
- StringsInmutabilidad, pool y los métodos que de verdad usas cada día.
- ArraysTamaño fijo, arrays de arrays y las utilidades de java.util.Arrays.
- MétodosFirmas, sobrecarga, paso por valor y métodos que hacen una sola cosa.
Programación Orientada a Objetos
Clases y objetos, y los cuatro pilares: encapsulamiento, herencia, polimorfismo y abstracción, con la memoria a la vista.
- Clases y objetosLa plantilla, la instancia y la referencia: qué hace new, dónde vive el objeto y por qué dos nombres pueden mirar al mismo.
- Encapsulamiento y modificadores de accesoCampos privados, setters que validan y el contrato que firma cada método público.
- Herencia y polimorfismoUna superclase, muchas subclases: qué se hereda, quién decide qué método corre y por qué un campo no es polimórfico.
- Interfaces y abstracciónUn contrato de métodos, las clases que lo cumplen y cuándo conviene una clase abstracta.
- Object y sus contratosLos métodos que toda clase hereda, las reglas que prometen y lo que se rompe al no cumplirlas.
- Records y clases de datosEl contenedor de valores en una línea: qué escribe el compilador, dónde vive el invariante y cuándo sigue haciendo falta una clase.
Collections y Streams
Listas, mapas, conjuntos y el pipeline funcional de Stream.
- El marco de coleccionesPor qué un array no basta, qué interfaz elegir para cada necesidad y cómo se recorren, se tipan y se congelan las colecciones.
- Listas: orden e índiceQué promete una lista, por qué ArrayList es el valor por defecto, cuándo LinkedList y cómo ordenar, copiar y borrar sin romperla.
- Conjuntos y el contrato de equalsQué promete un Set, cómo deciden HashSet, LinkedHashSet y TreeSet si un valor es duplicado, y por qué un elemento mutable desaparece.
- Mapas: claves y valoresClaves únicas, valores que se sustituyen y una tabla que encuentra la pareja sin recorrerla: HashMap, LinkedHashMap y TreeMap.
- Stream: el pipeline perezosoQué es un stream, por qué no ejecuta nada hasta la operación final y por qué solo se puede recorrer una vez.
- Collectors, Optional y agregaciónCómo convertir un stream en una colección y agrupar sus datos con Collectors, y cómo devolver un Optional en vez de un null.
Concurrencia
Hilos, estados, locks y memoria compartida, sin humo.
- Hilos y su ciclo de vidaQué es un hilo, cómo se crea y arranca, qué estados atraviesa y cómo esperar, interrumpir y nombrar hilos sin adivinar.
- Memoria compartida y sincronizaciónPor qué dos hilos pierden actualizaciones, qué garantiza el monitor de synchronized y por qué volatile no basta.
- Executors y tareasReparte tareas entre hilos con ExecutorService, recoge resultados con Future y apaga el pool sin dejar la JVM colgada.
- Colecciones y utilidades concurrentesPor qué HashMap pierde entradas con dos hilos y qué dan ConcurrentHashMap, CopyOnWriteArrayList, BlockingQueue y los atómicos.
- Locks, deadlocks y diagnósticoCuando synchronized no llega: ReentrantLock, condiciones, cerrojos de lectura y escritura, StampedLock, interbloqueos y su diagnóstico.
- Hilos virtualesQué cambian los hilos virtuales de Java 21: cómo se crean, cuánto cuestan, por qué no se agrupan y cuándo no aceleran nada.
Novedades por versión
Qué trajo cada LTS, qué se quedó por el camino y qué cambió sin avisar.
- Java 8Lambdas, Streams y java.time: la versión que cambió cómo se escribe Java.
- Java 11El cliente HTTP moderno, el lanzador de archivo único y la salida de Java EE.
- Java 17Sealed, encapsulación fuerte y el fin de la era del Security Manager.
- Java 21Hilos virtuales, patrones en switch y record patterns.
- Java 25Archivos fuente compactos, cuerpos de constructor flexibles y AOT.