Documentación visual de Java
Aprende Java viendo qué pasa por dentro.
Diagramas animados, bytecode paso a paso y la máquina virtual explicada sin humo. Todo lo que ocurre entre tu código y la salida.
- 40 capítulos
- 6 secciones de contenido
- De Java 8 a Java 25
javac HelloWorld.javajava HelloWorld¡Hola, mundo!
javap -c es la etapa 3 de la rutaVer la ruta
La ruta
Del código a la pantalla, sin cajas negras
Cinco etapas. La misma ruta que sigue tu programa cada vez que ejecutas java.
Abre una etapa para ver el detalle. También funciona con Enter.
Escribes una clase con un método main y un mensaje.
Escribes una clase con un método main y un mensaje.
public class HelloWorld { public static void main(String[] args) { … } }Revisa los tipos y traduce tu código a bytecode.
Revisa tipos, resuelve imports y traduce tu código a bytecode. Si algo no cuadra, falla aquí.
Instrucciones portables que cualquier JVM entiende.
Instrucciones portables que cualquier JVM entiende. Mira lo que hay dentro:
0: getstatic #7 // Field java/lang/System.out 3: ldc #13 // String ¡Hola, mundo! 5: invokevirtual #15 // Method java/io/PrintStream.println 8: returnCarga la clase, verifica el bytecode y lo ejecuta.
Carga la clase, verifica el bytecode y lo interpreta o lo compila a nativo con JIT.
El programa escribe el resultado en la salida estándar.
El programa escribe en la salida estándar y termina.
El camino
Un recorrido progresivo en 6 etapas: del Hola, mundo al código que se sostiene
Cada etapa se apoya en la anterior. Puedes leerlo de corrido o ir directo a lo que necesitas hoy.
Fundamentos
La JVM, los tipos y el control de flujo. Empiezas con un Hola, mundo y ves qué hace javac por ti.
9 capítulosProgramación Orientada a Objetos
Clases, encapsulamiento, herencia e interfaces, con diagramas de memoria que se leen de un vistazo.
10 capítulosCollections y Streams
Listas, mapas y conjuntos, más el pipeline funcional de Stream: qué colección usar y cuándo.
6 capítulosConcurrencia
Hilos, estados, locks y memoria compartida. Lo que rompe en producción, explicado igual de claro.
6 capítulosBiblioteca estándar
Fechas, zonas horarias, dinero exacto y archivos: la biblioteca estándar que se toca todos los días.
7 capítulosCalidad
Comprobaciones que dicen la verdad: qué asertar, cómo aislar el mundo exterior y cómo se escribe un test con JUnit 5.
2 capítulos
Modo de lectura
Tu versión, sin perder el contexto
El selector oculta del índice y la navegación lo que aún no existía en tu LTS. Si abres un capítulo más reciente por su enlace directo, te avisa en vez de borrarlo. Una página por tema, sin duplicar URLs; el parámetro ?v= comparte tu modo.
Java 8
Fuera de esta versión
public record Punto(int x, int y) {}Records no aparece en el índice. Si llegas al capítulo por un enlace, verás un aviso: necesita Java 17, la primera LTS con records.
Java 17
Disponible en esta versión
public record Punto(int x, int y) {}El mismo capítulo aparece en el índice y puedes leerlo sin aviso de incompatibilidad. El código y la ruta son los mismos.
Comparación ilustrada, no otro selector. Las novedades dentro de un capítulo llevan su versión indicada.
Elige tu LTS en la documentaciónUna muestra real
Así se ve un capítulo
¿Qué guarda un BigDecimal? Este fragmento del ejemplo DecimalScale te enseña el entero sin escala, la escala y la precisión, en ese orden.
Código Java
Fragmento del método main, con java.math.BigDecimal importado.
BigDecimal price = new BigDecimal("19.90");
System.out.println(price.unscaledValue());
System.out.println(price.scale());
System.out.println(price.precision());Salida
Las tres primeras líneas de la salida publicada.
1990 2 4
19.90 se representa como 1990 multiplicado por diez elevado a menos 2. Tiene cuatro dígitos de precisión, no dos.
Lee el capítulo de BigDecimalVisualizaciones
Los estados de un hilo, paso a paso
El ciclo de vida de un Thread. El diagrama se entiende completo sin JavaScript; con los controles puedes probar cada transición y ver cuáles acepta la máquina virtual.
- NEWEl hilo existe, pero todavía nadie llamó a start().
- RUNNABLEEstá en la cola del planificador esperando su turno de CPU.
- BLOCKEDOtro hilo tiene el monitor y este se quedó esperando el lock.
- WAITINGHizo wait() o join(): aguarda que otro hilo lo despierte.
- TERMINATEDEl run() volvió o lanzó una excepción: ya no vuelve.
Estado actual: NEW
NEW: El hilo existe, pero todavía nadie llamó a start().
Tu siguiente paso: un capítulo.
Abre el índice, elige tu versión y empieza por Hola, mundo. Si ya tienes una duda concreta, busca el tema y ve directo a su explicación.
Con JavaScript, abre la búsqueda con Ctrl + K o ⌘ + K. En esta portada, / enfoca el terminal cuando está listo y no estás escribiendo en otro campo.
Elige qué leer hoy