Retos de Java, sin cuenta
Lo que cambia entre versiones de Java, convertido en retos de unos dos minutos. Elige uno y resuélvelo en el navegador: sin registro y sin compilar nada.
559 retos · 11 saltos de versión
Java 11 a fondo
Inferencia con var var: adiós a repetir el tipo 3 retos
Inferencia con var Los límites de var 3 retos
La nueva API de String isBlank, strip y repeat 3 retos
La nueva API de String lines(): procesa texto línea a línea 3 retos
HTTP Client estándar java.net.http: peticiones sin librerías 3 retos
HTTP Client estándar Peticiones asíncronas con sendAsync 2 retos
Colecciones y ficheros Factorías of(): colecciones inmutables 3 retos
Colecciones y ficheros Files.readString y writeString 3 retos
Java 17 → 21: el salto entre LTS
switch con patrones switch deja de comparar solo constantes 3 retos
switch con patrones case null y guardas when 3 retos
switch con patrones Exhaustividad y dominancia 3 retos
Record patterns Deconstruir un record dentro del patrón 3 retos
Record patterns Patrones anidados, var y lo que no encaja 3 retos
Hilos virtuales Hilos virtuales: escala, no velocidad 3 retos
Hilos virtuales Crearlos está bien; agruparlos, no 3 retos
Hilos virtuales Pinning: cuando el hilo virtual se queda pegado 3 retos
Colecciones secuenciadas getFirst, getLast y reversed 3 retos
Colecciones secuenciadas SequencedMap y los límites de la familia 3 retos
UTF-8 por defecto UTF-8 deja de depender de la máquina 3 retos
UTF-8 por defecto file.encoding=COMPAT y native.encoding 3 retos
Lo que sigue en preview String templates: interpolación con validación (preview) 3 retos
Lo que sigue en preview Concurrencia estructurada y scoped values (preview) 3 retos
Lo que sigue en preview El guion bajo y un main sin ceremonia (preview) 3 retos
Qué más trae el salto Debajo del capó: ZGC generacional, KEM y jwebserver 3 retos
Qué más trae el salto Avisos y deprecaciones que sí te afectan 3 retos
Java 21 → 23: pocas finales, mucho preview
Variables y patrones sin nombre El guion bajo para lo que no vas a usar 3 retos
Variables y patrones sin nombre El guion bajo dentro de los patrones 3 retos
Variables y patrones sin nombre Un case, varios patrones 3 retos
Memoria y funciones nativas Memoria fuera del heap, con API estándar 3 retos
Memoria y funciones nativas Arenas: quién decide cuándo se libera 3 retos
Memoria y funciones nativas Llamar a una función nativa sin escribir C 3 retos
Ejecutar fuentes sin compilar java Prog.java deja de limitarse a un fichero 3 retos
Ejecutar fuentes sin compilar Los límites del modo fuente 3 retos
Javadoc en Markdown Comentarios /// en vez de HTML 3 retos
Javadoc en Markdown Enlaces, y por qué tres barras 3 retos
sun.misc.Unsafe en cuenta atrás 79 de 87 métodos, deprecados para eliminación 3 retos
sun.misc.Unsafe en cuenta atrás Audita tus dependencias antes de que duela 3 retos
Preview: las reglas del juego Preview no es beta: es impermanente 3 retos
Preview: las reglas del juego String Templates: cuando una preview se retira 3 retos
Lo que sigue en preview en 23 import module: importar un módulo entero (preview) 3 retos
Lo que sigue en preview en 23 Stream gatherers: operaciones intermedias a medida (preview) 3 retos
Lo que sigue en preview en 23 El resto del catálogo inestable de Java 23 3 retos
Qué más trae el salto La JVM: ZGC generacional y region pinning 3 retos
Qué más trae el salto Dos cambios que te pueden romper el build 3 retos
Qué más trae el salto API nueva pequeña que sí puedes usar hoy 3 retos
Java 23 → 25: la LTS que cierra el catálogo
Streams a tu medida gather: el punto de extensión de Stream 3 retos
Streams a tu medida El catálogo que ya viene de fábrica 3 retos
Streams a tu medida mapConcurrent: llamadas lentas en paralelo 3 retos
Hilos virtuales sin pinning synchronized deja de clavar el hilo virtual 3 retos
Hilos virtuales sin pinning Lo que queda por vigilar 3 retos
Scoped Values Del ThreadLocal al ScopedValue 3 retos
Scoped Values where, run y call 3 retos
Scoped Values Rebinding: cambiar el valor un rato 3 retos
Programas de un solo fichero main sin public, sin static y sin String[] 3 retos
Programas de un solo fichero Ficheros fuente compactos 3 retos
Programas de un solo fichero java.lang.IO: cinco métodos y ya 3 retos
Importar un módulo entero import module: una línea, muchos paquetes 3 retos
Importar un módulo entero Cuando el nombre simple se vuelve ambiguo 3 retos
Constructores flexibles Validar antes de super() 3 retos
Constructores flexibles Qué puedes y qué no en el prólogo 3 retos
Bytecode sin ASM java.lang.classfile: bytecode con API estándar 3 retos
Bytecode sin ASM Transformar clases sin escribir el bucle 3 retos
Integridad por defecto El Security Manager ya no se puede activar 3 retos
Integridad por defecto JNI y FFM: avisos hoy, excepciones mañana 3 retos
Integridad por defecto sun.misc.Unsafe: del aviso a la excepción 3 retos
- Una dependencia tuya llama cien veces a métodos de acceso a memoria de sun.misc.Unsafe. ¿Qué ves en la consola de un…
- Comprueba hoy si tu aplicación sobrevivirá a la fase en la que estos métodos lancen excepción.
- ¿Cuáles son los sustitutos estándar de los métodos de acceso a memoria de sun.misc.Unsafe?
Lo que sigue en preview en 25 Concurrencia estructurada: quinta preview 3 retos
Lo que sigue en preview en 25 Stable values, primitivos en patrones y el resto 3 retos
Qué más trae el salto Arrancar antes con la caché AOT 3 retos
Qué más trae el salto Menos memoria por objeto, y una plataforma menos 3 retos
Qué más trae el salto Criptografía lista para el futuro 3 retos
Java 11 → 17: seis versiones de lenguaje
switch como expresión Etiquetas con flecha: se acabó el break que se olvida 3 retos
switch como expresión El switch que devuelve un valor, y yield 3 retos
Text blocks Tres comillas y una cadena de dos dimensiones 3 retos
Text blocks Quién decide el margen: el delimitador de cierre 3 retos
Records record: la cabecera es la API 3 retos
Records El constructor compacto: validar y normalizar 3 retos
Records Lo que un record no puede hacer 3 retos
Pattern matching con instanceof El instanceof que castea por ti 3 retos
Pattern matching con instanceof La variable vive donde el patrón encajó seguro 3 retos
Clases sealed sealed y permits: quién puede heredar 3 retos
Clases sealed final, sealed o non-sealed: elige exactamente uno 3 retos
NullPointerException que ayudan El mensaje por fin dice qué variable valía null 3 retos
NullPointerException que ayudan Apagado en 14, encendido por defecto desde 15 3 retos
La API que heredas Stream.toList() y mapMulti 3 retos
La API que heredas Los métodos pequeños que llegaron en 12 y 15 3 retos
La API que heredas HexFormat y los generadores aleatorios de Java 17 3 retos
Los internos del JDK, cerrados illegal-access: de permit a deny y de deny a nada 3 retos
Los internos del JDK, cerrados Cómo sobrevivir: --add-opens y --add-exports 3 retos
Lo que sigue en preview en 17 Pattern matching en switch (preview, JEP 406) 3 retos
Lo que sigue en preview en 17 Dos API en incubadora: memoria foránea y vectores 3 retos
Qué más trae el salto GC de producto, jpackage y sockets locales 3 retos
Qué más trae el salto Deprecaciones y eliminaciones que rompen el build 3 retos
Java 21 → 25: de una LTS a la siguiente
Menos ruido en el código Variables sin nombre: el guion bajo 3 retos
Menos ruido en el código Patrones sin nombre y varios patrones por case 3 retos
Menos ruido en el código Constructores flexibles 3 retos
Streams a tu medida gather: operaciones intermedias que escribes tú 3 retos
Streams a tu medida Los cinco gatherers integrados 3 retos
Concurrencia: hilos y contexto synchronized deja de clavar los hilos virtuales 3 retos
Concurrencia: hilos y contexto Scoped values en vez de ThreadLocal 3 retos
Concurrencia: hilos y contexto Leer, reenlazar y heredar un scoped value 3 retos
Ejecutar Java sin ceremonia java Prog.java con más de un fichero 3 retos
Ejecutar Java sin ceremonia Ficheros fuente compactos y main de instancia 3 retos
Ejecutar Java sin ceremonia java.lang.IO y los imports automáticos 3 retos
Importar un módulo entero import module 3 retos
Importar un módulo entero Cuando el nombre simple se vuelve ambiguo 3 retos
Integridad por defecto El Security Manager queda deshabilitado para siempre 3 retos
Integridad por defecto El acceso nativo hay que habilitarlo 3 retos
Integridad por defecto sun.misc.Unsafe en cuenta atrás 3 retos
Las API que sustituyen librerías Class-File API: bytecode sin ASM 3 retos
Las API que sustituyen librerías FFM API: memoria y funciones nativas sin JNI 3 retos
Arrancar y calentar más rápido La caché AOT 3 retos
Arrancar y calentar más rápido Perfiles de calentamiento y cabeceras compactas 3 retos
Lo retirado y lo que sigue preview Los preview que viste en Java 21, cuatro años después 3 retos
Lo retirado y lo que sigue preview El catálogo de preview en Java 25 3 retos
Qué más trae el salto Recolectores de basura y la JVM 3 retos
Qué más trae el salto Herramientas y criptografía 3 retos
Java 23 → 24: gatherers, class files y avisos de integridad
Stream Gatherers gather: el punto de extensión que faltaba 3 retos
Stream Gatherers Los cinco gatherers de fábrica 3 retos
Stream Gatherers Componer y escribir tu propio gatherer 3 retos
synchronized y los hilos virtuales El final del pinning en synchronized 3 retos
synchronized y los hilos virtuales Lo que sigue clavado y cómo verlo 3 retos
Class files sin ASM Leer un class file 3 retos
Class files sin ASM Transformar un class file 3 retos
Arrancar más rápido: la caché AOT Tres pasos: grabar, crear, usar 3 retos
Arrancar más rápido: la caché AOT Qué entra en la caché y qué no 3 retos
Integridad por defecto: los avisos nuevos El Security Manager, desactivado para siempre 3 retos
Integridad por defecto: los avisos nuevos JNI y FFM: --enable-native-access 3 retos
Integridad por defecto: los avisos nuevos sun.misc.Unsafe avisa en ejecución 3 retos
Criptografía post-cuántica ML-KEM: encapsular claves 3 retos
Criptografía post-cuántica ML-DSA: firmar sin RSA 3 retos
Lo que sigue en preview en 24 Preview de lenguaje: patrones, constructores, imports y main 3 retos
Lo que sigue en preview en 24 Preview de API y la incubadora 3 retos
Qué más trae el salto Recolectores y memoria 3 retos
Qué más trae el salto Herramientas y ports 3 retos
Java 22 → 23: tres finales y un preview que desaparece
Javadoc en Markdown Tres barras, y el HTML se va 3 retos
Javadoc en Markdown Enlaces, tablas y bloques de código 3 retos
Javadoc en Markdown Las etiquetas siguen ahí (con dos reglas) 3 retos
ZGC: generacional por defecto -XX:+UseZGC ya significa generacional 3 retos
ZGC: generacional por defecto Qué revisar antes de subir la versión 3 retos
sun.misc.Unsafe: empieza la cuenta atrás 79 de 87 métodos, y por qué justo ahora 3 retos
sun.misc.Unsafe: empieza la cuenta atrás Cómo saber si te afecta 3 retos
String Templates se retira Lo que compilaba en 22 y en 23 ya no 3 retos
String Templates se retira Lo que cuesta un preview cuando desaparece 3 retos
El lenguaje en preview en 23 Tipos primitivos en los patrones (JEP 455) 3 retos
El lenguaje en preview en 23 import module: un módulo entero en una línea 3 retos
El lenguaje en preview en 23 Programas pequeños y constructores flexibles 3 retos
API en preview y en incubadora Segunda ronda: Class-File API y Stream Gatherers 3 retos
API en preview y en incubadora Loom en preview, y la incubadora al lado 3 retos
Qué más trae el salto Los cambios que te rompen el build 3 retos
Qué más trae el salto API nueva que puedes usar hoy 3 retos
Qué más trae el salto La JVM y los detalles que se mueven debajo 3 retos
Java 21 → 22: tres finales y un laboratorio lleno de previews
El guion bajo que significa «no lo uso» Variables que estás obligado a declarar 3 retos
El guion bajo que significa «no lo uso» Patrones que se saltan lo que no necesitan 3 retos
El guion bajo que significa «no lo uso» Varios patrones, una sola etiqueta case 3 retos
java.lang.foreign sale de preview Tercer preview en 21, final en 22 3 retos
java.lang.foreign sale de preview Segmentos y arenas: memoria con fecha de caducidad 3 retos
java.lang.foreign sale de preview Llamar a C, y el aviso que viene con ello 3 retos
Dos ficheros y todavía sin herramienta de build Cuando el programa se sale de un solo fichero 3 retos
Dos ficheros y todavía sin herramienta de build Dónde busca el lanzador los ficheros 3 retos
El lenguaje que solo puedes probar con --enable-preview Sentencias antes de super(...) 3 retos
El lenguaje que solo puedes probar con --enable-preview Un fichero, sin clase, con un main de instancia 3 retos
El lenguaje que solo puedes probar con --enable-preview String Templates, segunda vuelta 3 retos
Las API que aún no están listas Gatherers: tu propia operación intermedia 3 retos
Las API que aún no están listas Class files sin biblioteca empaquetada 3 retos
Las API que aún no están listas Segundas rondas, y una séptima incubación 3 retos
Qué más trae el salto El recolector deja de esperar a JNI 3 retos
Qué más trae el salto Lo que desaparece y lo que empieza a avisar 3 retos
Qué más trae el salto API pequeña que puedes usar hoy 3 retos
Java 25 → 26: el salto que acelera tus APIs y tu JVM
HTTP/3 sin drama: el cliente Java entra en la era QUIC Opta por HTTP/3 desde HttpClient 2 retos
HTTP/3 sin drama: el cliente Java entra en la era QUIC Negocia con cabeza: fallback y ALPN 2 retos
La JVM acelera: cachés AOT y un G1 con menos fricción AOT Object Caching: arranques más listos con cualquier GC 2 retos
La JVM acelera: cachés AOT y un G1 con menos fricción G1 con menos sincronización, más throughput 2 retos
Java 26 → 27: previews que maduran y una JVM que cambia sola
Concurrencia estructurada, séptima preview Un scope que no deja tareas sueltas 3 retos
Concurrencia estructurada, séptima preview El Joiner decide cuándo parar 3 retos
Concurrencia estructurada, séptima preview Migrar desde la sexta preview de Java 26 3 retos
Lazy Constants, tercera preview Un final que se inicializa cuando tú quieras 3 retos
Lazy Constants, tercera preview Colecciones perezosas y una API que adelgaza 3 retos
Tipos primitivos en patrones, quinta preview instanceof con primitivos: la pregunta es si cabe 3 retos
Tipos primitivos en patrones, quinta preview switch sobre long, float, double y boolean 3 retos
La JVM cambia de defaults sin tocar tu código G1 en todas partes 3 retos
La JVM cambia de defaults sin tocar tu código Cabeceras de objeto compactas por defecto 3 retos
La JVM cambia de defaults sin tocar tu código G1 deja de redimensionar el heap, e IHOP cambia de nombre 3 retos
Seguridad y diagnóstico de fábrica TLS 1.3 negocia post-cuántico sin que hagas nada 3 retos
Seguridad y diagnóstico de fábrica PEM sin escribir Base64 a mano 3 retos
Seguridad y diagnóstico de fábrica JFR tacha los secretos antes de escribirlos 3 retos
Lo que se rompe al subir de 26 a 27 Eliminaciones que te dejan sin arrancar 3 retos
Lo que se rompe al subir de 26 a 27 Cambios que no dan error, solo resultados distintos 3 retos
Que cada reto cuente
Con una cuenta gratuita, cada reto que resuelves suma XP, alarga tu racha y queda guardado en tu progreso.