De Java 18 a Java 21: El Java más moderno que nunca

De Java 18 a Java 21: El Java más moderno que nunca

Con la cadencia de lanzamientos semestrales, Java sigue evolucionando de forma continua. Desde Java 18 en adelante, el lenguaje ha incorporado características experimentales muy esperadas, muchas de las cuales se están consolidando hacia futuras versiones LTS, como Java 21 (septiembre 2023). Aquí te dejo un resumen versión por versión:


Java 18 (marzo 2022)


  • 1. Simple Web Server
    • Nuevo servidor HTTP embebido para desarrollo o testing.

    $ jwebserver .
    

  • 2. UTF-8 por defecto
    • Java ahora usa UTF-8 como charset predeterminado.


Java 19 (septiembre 2022)


  • 1. Virtual Threads (preview)
    • Parte del Project Loom.
    • Hilos ligeros gestionados por la JVM. Enormemente escalables.
    Thread.startVirtualThread(() -> {
        // Lógica concurrente sin bloqueos
    });
    

  • 2. Pattern Matching para switch (preview)
    • Posibilidad de usar patrones dentro de switch.

    switch (obj) {
        case String s -> System.out.println("Cadena: " + s);
        case Integer i -> System.out.println("Entero: " + i);
    }
    

  • 3. Structured Concurrency (incubadora)
    • Mejora el manejo de tareas concurrentes jerárquicas.


Java 20 (marzo 2023)


  • 1. Virtual Threads (2° preview)
    • Continúa puliéndose esta función.

  • 2. Record Patterns (preview)
    • Desestructuración de records de forma elegante.
    if (persona instanceof Persona(String nombre, int edad)) {
        System.out.println(nombre + " tiene " + edad);
    }
    



Java 21 (septiembre 2023) – LTS


Nueva versión LTS — Muy esperada por la comunidad.

  • 1. Virtual Threads (¡estables!)
    • Ya se puede usar en producción. Perfecto para apps altamente concurrentes como servidores web.

  • 2. Pattern Matching para switch (estables)

  • 3. Record Patterns (preview 3)

  • 4. String Templates (preview)
    • Forma avanzada de interpolar strings.
    String nombre = "María";
    String saludo = STR."Hola, \{nombre}!";
    

  • 5. Sequenced Collections
    • Nuevas interfaces SequencedCollection, SequencedSet, etc. para listas ordenadas.



Resumen

El trayecto de Java 12 a Java 17 fue clave para la modernización del lenguaje. Muchas características pasaron por ciclos de prueba antes de convertirse en estables. Java 17 representa una versión LTS madura, con soporte para programación más expresiva, concisa y moderna.

Versión Estado Novedades Clave
Java 18 No LTS UTF-8 por defecto, Simple Web Server
Java 19 No LTS Virtual threads (preview), switch con patrones
Java 20 No LTS Record patterns (preview), Virtual threads mejora
Java 21 LTS Virtual threads estables, pattern matching, string templates (preview)

De Java 12 a Java 17: Camino al Próximo LTS

De Java 12 a Java 17: Camino al Próximo LTS

Tras el lanzamiento de Java 11 como versión LTS en 2018, Oracle y la comunidad de OpenJDK continuaron con su nuevo ritmo de versiones semestrales. Durante este período, se introdujeron muchas mejoras y características experimentales que maduraron hasta consolidarse en Java 17, la siguiente versión LTS (Long-Term Support) lanzada en septiembre de 2021.
En esta entrada te contamos las novedades más importantes de cada versión entre Java 12 y Java 17.


Java 12 (marzo 2019)


  • 1. Switch Expressions (preview)
    • Se introduce una nueva forma de escribir switch, más concisa y expresiva.

    String resultado = switch (dia) {
        case MONDAY, FRIDAY -> "Fin de semana cerca";
        case TUESDAY -> "Segundo día";
        default -> "Otro día";
    };
    

  • 2. Compact Number Formatting
    • Formateo de números abreviados (por ejemplo, 1.2K, 3M) con NumberFormat.


Java 13 (septiembre 2019)


  • 1. Text Blocks (preview)
    • Introducción de bloques de texto multilínea con """.

    String json = """
    {
      "nombre": "Juan",
      "edad": 30
    }
    """;
    

  • 2. Mejoras en el recolector de basura y APIs internas.


Java 14 (marzo 2020)


  • 1. Records (preview)
    • Nueva sintaxis para declarar clases inmutables con menos código.
    public record Persona(String nombre, int edad) {}
    

  • 2. Pattern Matching para instanceof (preview)
    if (obj instanceof String s) {
        System.out.println(s.toUpperCase());
    }
    

  • 3. NPE más claros (NullPointerExceptions)
    • Stack traces más informativos para depurar errores de null.



Java 15 (septiembre 2020)


  • 1. Text Blocks (¡ya estables!)
    • Los bloques de texto salen de la fase preview.

  • 2. Sealed Classes (preview)
    • Permite restringir qué clases pueden extender una clase o implementar una interfaz.
    public sealed class Forma permits Circulo, Rectangulo {}
    


Java 16 (marzo 2021)


  • 1. Records (estables)
    • Los records se convierten en una característica permanente.

  • 2. Pattern Matching para instanceof (estables)
  • 3. Packaging Tool
    • Nueva herramienta (jpackage) para empaquetar aplicaciones Java como instaladores nativos (Windows, macOS, Linux).


Java 17 (septiembre 2021) – ¡LTS!


  • 1. Sealed Classes (estables)
  • 2. Pattern Matching mejora
    • Continuación del desarrollo de instanceof y otras estructuras condicionales inteligentes.
  • 3. Nuevos GC y rendimiento
    • ZGC y G1 mejoran en latencia y eficiencia.
    • Eliminación del recolector experimental Shenandoah (luego reintroducido en distribuciones como OpenJ9 y Red Hat).
  • 4. API de Cadenas enriquecida
    • Métodos como stripIndent(), translateEscapes(), etc.
  • 5. Eliminación de APIs y módulos obsoletos
    • Eliminación completa de Applet, SecurityManager (marcado como obsoleto), y otros legados.


Resumen

El trayecto de Java 12 a Java 17 fue clave para la modernización del lenguaje. Muchas características pasaron por ciclos de prueba antes de convertirse en estables. Java 17 representa una versión LTS madura, con soporte para programación más expresiva, concisa y moderna.

Versión Estado Novedades Clave
Java 12 No LTS Switch expressions (preview), number formatting
Java 13 No LTS Text blocks (preview)
Java 14 No LTS Records (preview), NPE claros
Java 15 No LTS Text blocks (estables), sealed classes (preview)
Java 16 No LTS Records y pattern matching estables, jpackage
Java 17 LTS Sealed classes, mejoras de GC, estabilidad en features modernas

De Java 9 a Java 11: Lo más destacado en cada versión

De Java 9 a Java 11: Lo más destacado en cada versión

Java 9 (septiembre 2017)


No es LTS, pero fue una versión muy importante por los siguientes cambios:
  • 1. Sistema de Módulos (Project Jigsaw)
    • Introducción del sistema de módulos (module-info.java).
    • Mejora la encapsulación, permite dividir el JDK en módulos.
    • Permite a las aplicaciones definir qué partes del código exponen o requieren.

    module com.ejemplo.miapp {
        requires java.base;
    }
    

  • 2. JShell (REPL)
    • Nueva herramienta interactiva de línea de comandos.
    • Permite probar fragmentos de código Java sin necesidad de compilar clases.
  • 3. API Stream mejorada
    • Nuevos métodos: takeWhile(), dropWhile(), ofNullable(), etc.
  • 4. Interface privada en métodos
    • Métodos privados en interfaces, útil para compartir lógica entre métodos default o static.


Java 10 (marzo 2018)


También no LTS, pero con una novedad destacada:
  • 1. var – Inferencia de tipo local
    • Permite declarar variables con inferencia de tipo a nivel local.
    var lista = new ArrayList<String>();
    
    • Mejora la legibilidad
    • Solo se puede usar en variables locales, no en parámetros o atributos

  • 2. Recolección de basura experimental (G1 mejoras)
    • Mejoras en el recolector G1 GC (mejor administración de memoria).

  • 3. API de colecciones inmutables mejorada
    • Posibilidad de copiar fácilmente colecciones usando métodos copyOf() en List, Set, y Map.


Java 11 (septiembre 2018) – LTS


Versión LTS (Long-Term Support) — sucesora oficial de Java 8 para muchos entornos de producción.
  • 1. Nuevas funciones del lenguaje
    • var en parámetros de lambda:
    lista.forEach((var item) -> System.out.println(item));
    

  • 2. API HTTP Client (estable)
    • El nuevo HttpClient (experimental en Java 9) ahora es estable.
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.ejemplo.com"))
        .build();
    
    HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
    

  • 3. Métodos útiles en String
    • isBlank(), lines(), repeat(n), strip(), stripLeading(), stripTrailing()
    "Hola ".repeat(3); // Hola Hola Hola
    

  • 4. Eliminación de APIs obsoletas
    • Se eliminaron herramientas y módulos antiguos: Java EE y CORBA (como javax.xml.bind, javax.activation, etc.)

  • 5. Nuevo recolector de basura: ZGC (experimental)
    • ZGC (Z Garbage Collector), un recolector de baja latencia, escalable.



Resumen

Versión Estado Novedades Clave
Java 9 No LTS Sistema de módulos, JShell, mejoras en Stream
Java 10 No LTS var para variables locales, mejoras en GC
Java 11 LTS HttpClient, mejoras en String, var en lambdas, eliminación de Java EE

Java 8: Las Principales Novedades que Revolucionaron el Lenguaje


Las Principales Novedades que Revolucionaron el Lenguaje

Desde su lanzamiento en marzo de 2014, Java 8 marcó un hito en la evolución del lenguaje, incorporando características largamente esperadas por la comunidad. Si vienes de Java 7, este artículo te pone al día con los cambios más importantes que trajo esta versión.

  • 1. Expresiones Lambda


    ¡La estrella de Java 8! Las expresiones lambda permiten tratar funciones como ciudadanos de primera clase, facilitando el trabajo con APIs funcionales y reduciendo el código "boilerplate"

    // Antes
    Collections.sort(lista, new Comparator<String>() {
        public int compare(String a, String b) {
            return a.compareTo(b);
        }
    });
    
    // Con Lambda
    lista.sort((a, b) -> a.compareTo(b));
    

    ✅ Más conciso
    ✅ Más legible
    ✅ Ideal para trabajar con colecciones

  • 2. API Stream

    La nueva Stream API permite procesar colecciones de manera funcional, con operaciones como map, filter, reduce, etc. Ideal para trabajar con datos de forma declarativa y paralelizable.

    List<String> nombres = Arrays.asList("Ana", "Luis", "Pedro");
    List<String> resultado = nombres.stream()
        .filter(n -> n.startsWith("P"))
        .map(String::toUpperCase)
        .collect(Collectors.toList());
    

  • 3. Interface con Métodos por Defecto (Default Methods)

    Ahora las interfaces pueden tener implementaciones por defecto, lo que permite extender interfaces sin romper la compatibilidad con versiones anteriores.

    interface Saludo {
        default void decirHola() {
            System.out.println("Hola!");
        }
    }
    

  • 4. Referencias a Métodos y Constructores

    Una forma elegante de referirse a métodos existentes sin ejecutarlos, útil sobre todo en programación funcional.

    // Lambda
    lista.forEach(s -> System.out.println(s));
    
    // Referencia a método
    lista.forEach(System.out::println);
    

  • 5. Nueva API de Fecha y Hora (java.time)

    Se introdujo un nuevo paquete java.time.*, inspirado en la biblioteca Joda-Time. Mucho más intuitivo, inmutable y libre de los problemas del antiguo Date y Calendar.

    LocalDate hoy = LocalDate.now();
    LocalDate cumpleaños = LocalDate.of(1990, Month.JUNE, 3);
    Period edad = Period.between(cumpleaños, hoy);
    

  • 6. Optional: Evitando NullPointerException

    El nuevo tipo Optional<T> ayuda a manejar valores potencialmente nulos de forma segura y explícita.

    Optional<String> nombre = Optional.ofNullable(obtenerNombre());
    nombre.ifPresent(n -> System.out.println(n.toUpperCase()));
    

  • 7. Mejoras en la JVM y rendimiento

    Aunque más técnicas, Java 8 trajo mejoras en el rendimiento de la JVM, la incorporación del compilador Nashorn para ejecutar código JavaScript, y optimizaciones internas que hacen a las lambdas y streams muy eficientes.




Libros para programadores en JAVA

Para principiantes:

  • Head First Java de Kathy Sierra y Bert Bates

    Este libro es ideal si estás empezando en la programación. Utiliza un enfoque visual y accesible, con muchos ejemplos prácticos. Te ayudará a comprender los conceptos básicos de Java y la programación orientada a objetos de manera amena.

  • Java: A Beginner's Guide de Herbert Schildt

    Un clásico para aquellos que quieren entender Java desde cero. Explica desde lo más básico hasta temas más avanzados de una forma clara y progresiva. Es excelente para nuevos programadores.

  • Effective Java (3ra edición) de Joshua Bloch

    Aunque es un libro más avanzado, puede ser útil incluso para principiantes con algo de experiencia. Está repleto de buenas prácticas y consejos útiles para escribir código Java limpio y eficiente.

Para desarrolladores intermedios y avanzados:

  • Java: The Complete Reference de Herbert Schildt

    Este libro es un recurso exhaustivo sobre Java, cubriendo tanto la sintaxis básica como las bibliotecas y API más avanzadas. Ideal para desarrolladores que buscan una guía completa sobre el lenguaje.

  • Clean Code: A Handbook of Agile Software Craftsmanship de Robert C. Martin

    Aunque no está enfocado exclusivamente en Java, es una obra clave para aprender buenas prácticas de programación y diseño de código limpio. Sus principios son aplicables a cualquier lenguaje, y muchos ejemplos están hechos en Java.

  • Java Concurrency in Practice de Brian Goetz

    Si tienes algo de experiencia con Java y quieres profundizar en la programación concurrente, este libro es esencial. Te enseña a trabajar con hilos, sincronización, y cómo escribir aplicaciones Java concurrentes seguras.

  • Spring in Action de Craig Walls

    Si te interesa trabajar con el popular framework Spring, este libro es una excelente guía para aprender a desarrollar aplicaciones robustas con Java. Cubre temas como la inyección de dependencias, AOP (Aspect-Oriented Programming), y la configuración de Spring.

  • Springboot in Action de Craig Walls

    También del mismo autor, esta es guía práctica para desarrollar aplicaciones Java con Spring Boot. A través de ejemplos claros, el autor explica cómo simplificar el proceso de configuración y despliegue, aprovechando la potencia de Spring Framework para crear aplicaciones robustas y escalables de manera eficiente.

Para especialización:

  • Java Performance: The Definitive Guide de Scott Oaks

    Este libro es perfecto para aquellos que deseen optimizar el rendimiento de sus aplicaciones Java. Cubre desde la optimización de la memoria hasta la mejora del rendimiento en la ejecución de aplicaciones en producción.

  • Java: The Good Parts de Jim Waldo

    Este libro es ideal para los desarrolladores que ya tienen experiencia con Java y desean centrarse en los aspectos más poderosos del lenguaje. Es una excelente manera de aprender a escribir un código más eficiente y conciso.

  • Maven: The definitive guide por Sonatype

    Ésta es una guía completa para aprender a usar Apache Maven, una herramienta de automatización de construcción. El libro cubre desde la configuración básica hasta técnicas avanzadas, explicando cómo gestionar dependencias, construir proyectos, integrar con otros sistemas y optimizar el proceso de desarrollo.

  • Oracle Certified Associate Java SE 8 Programmer I de Jeanne Boyarsky y Scott Selikoff

    Ésta es una guía completa para preparar el examen de certificación OCA Java SE 8. El libro cubre los fundamentos de Java, incluyendo sintaxis, estructuras de control, clases, interfaces, y manejo de excepciones, proporcionando ejercicios prácticos y consejos para el examen.