Introducción

Java 9 introdujo una serie de características y mejoras significativas que han continuado evolucionando en versiones posteriores. En esta sección, exploraremos algunas de las características más importantes de Java 9 y versiones posteriores, incluyendo Java 10, 11, 12, y más allá. Estas características incluyen el sistema de módulos, mejoras en la API de flujo, nuevas herramientas y mejoras en el rendimiento.

Contenido

  1. Sistema de Módulos (Project Jigsaw)
  2. JShell: El REPL de Java
  3. Mejoras en la API de Flujo
  4. Interfaz de Métodos Privados
  5. Var: Inferencia de Tipos Locales (Java 10)
  6. API de Colecciones Inmutables (Java 10)
  7. Garbage Collector Mejorado (Java 11)
  8. Nuevas Características de Java 12 y Más Allá
  9. Ejercicios Prácticos
  10. Conclusión

  1. Sistema de Módulos (Project Jigsaw)

Descripción

El sistema de módulos, introducido en Java 9, permite dividir una aplicación en módulos, mejorando la encapsulación y la gestión de dependencias.

Ejemplo

module com.example.myapp {
    requires java.base;
    exports com.example.myapp.api;
}

Explicación

  • module com.example.myapp {}: Define un módulo llamado com.example.myapp.
  • requires java.base;: Indica que este módulo depende del módulo java.base.
  • exports com.example.myapp.api;: Expone el paquete com.example.myapp.api para que otros módulos puedan acceder a él.

Ejercicio

Ejercicio 1: Crea un módulo simple que exporte un paquete y otro módulo que lo consuma.

  1. JShell: El REPL de Java

Descripción

JShell es una herramienta interactiva de línea de comandos que permite probar fragmentos de código Java rápidamente.

Ejemplo

jshell> int x = 10;
x ==> 10

jshell> System.out.println(x * 2);
20

Explicación

  • jshell>: Indica el prompt de JShell.
  • int x = 10;: Declara una variable x y la inicializa con 10.
  • System.out.println(x * 2);: Imprime el resultado de x * 2.

Ejercicio

Ejercicio 2: Usa JShell para experimentar con diferentes operadores y estructuras de control.

  1. Mejoras en la API de Flujo

Descripción

Java 9 introdujo varios métodos nuevos en la API de flujo, como takeWhile, dropWhile, y iterate.

Ejemplo

List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Integer> result = numbers.stream()
    .takeWhile(n -> n < 5)
    .collect(Collectors.toList());
System.out.println(result); // [1, 2, 3, 4]

Explicación

  • takeWhile(n -> n < 5): Toma elementos del flujo mientras la condición n < 5 sea verdadera.

Ejercicio

Ejercicio 3: Usa dropWhile para omitir elementos de un flujo hasta que se cumpla una condición.

  1. Interfaz de Métodos Privados

Descripción

Java 9 permite definir métodos privados en interfaces, mejorando la reutilización de código dentro de la interfaz.

Ejemplo

public interface MyInterface {
    default void publicMethod() {
        privateMethod();
    }

    private void privateMethod() {
        System.out.println("This is a private method");
    }
}

Explicación

  • private void privateMethod() {}: Define un método privado dentro de la interfaz MyInterface.

Ejercicio

Ejercicio 4: Crea una interfaz con un método privado y un método público que lo utilice.

  1. Var: Inferencia de Tipos Locales (Java 10)

Descripción

Java 10 introdujo la palabra clave var para la inferencia de tipos locales, simplificando la declaración de variables.

Ejemplo

var list = new ArrayList<String>();
list.add("Hello");
System.out.println(list.get(0)); // Hello

Explicación

  • var list = new ArrayList<String>();: Declara una variable list cuyo tipo es inferido como ArrayList<String>.

Ejercicio

Ejercicio 5: Usa var para declarar variables en un programa simple.

  1. API de Colecciones Inmutables (Java 10)

Descripción

Java 10 introdujo métodos para crear colecciones inmutables de manera más sencilla.

Ejemplo

List<String> list = List.of("one", "two", "three");
System.out.println(list); // [one, two, three]

Explicación

  • List.of("one", "two", "three"): Crea una lista inmutable con los elementos proporcionados.

Ejercicio

Ejercicio 6: Crea un conjunto inmutable usando Set.of.

  1. Garbage Collector Mejorado (Java 11)

Descripción

Java 11 introdujo mejoras en el Garbage Collector, incluyendo el nuevo Garbage Collector ZGC.

Ejemplo

// No hay un ejemplo de código directo, pero se puede habilitar ZGC con la opción de JVM:
java -XX:+UseZGC MyApp

Explicación

  • -XX:+UseZGC: Habilita el Garbage Collector ZGC.

Ejercicio

Ejercicio 7: Investiga y escribe un breve resumen sobre las ventajas de ZGC.

  1. Nuevas Características de Java 12 y Más Allá

Descripción

Java 12 y versiones posteriores han introducido varias características nuevas, como switch mejorado, text blocks, y records.

Ejemplo

// Switch mejorado en Java 12
int day = 2;
String dayName = switch (day) {
    case 1 -> "Monday";
    case 2 -> "Tuesday";
    case 3 -> "Wednesday";
    default -> "Unknown";
};
System.out.println(dayName); // Tuesday

Explicación

  • switch (day) { ... }: Utiliza la nueva sintaxis de switch para asignar valores.

Ejercicio

Ejercicio 8: Usa text blocks para definir una cadena multilínea en Java 13 o posterior.

  1. Ejercicios Prácticos

Ejercicio 1: Sistema de Módulos

Tarea: Crea dos módulos, uno que exporte un paquete y otro que lo consuma.

Ejercicio 2: JShell

Tarea: Usa JShell para experimentar con diferentes operadores y estructuras de control.

Ejercicio 3: API de Flujo

Tarea: Usa dropWhile para omitir elementos de un flujo hasta que se cumpla una condición.

Ejercicio 4: Interfaz de Métodos Privados

Tarea: Crea una interfaz con un método privado y un método público que lo utilice.

Ejercicio 5: Var

Tarea: Usa var para declarar variables en un programa simple.

Ejercicio 6: API de Colecciones Inmutables

Tarea: Crea un conjunto inmutable usando Set.of.

Ejercicio 7: Garbage Collector Mejorado

Tarea: Investiga y escribe un breve resumen sobre las ventajas de ZGC.

Ejercicio 8: Nuevas Características

Tarea: Usa text blocks para definir una cadena multilínea en Java 13 o posterior.

  1. Conclusión

En esta sección, hemos explorado algunas de las características más importantes introducidas en Java 9 y versiones posteriores. Desde el sistema de módulos hasta las mejoras en la API de flujo y la inferencia de tipos locales, estas características han mejorado significativamente la experiencia de desarrollo en Java. A medida que continúes aprendiendo y utilizando estas nuevas características, estarás mejor preparado para escribir código Java más eficiente y mantenible.

Curso de Programación en Java

Módulo 1: Introducción a Java

Módulo 2: Flujo de Control

Módulo 3: Programación Orientada a Objetos

Módulo 4: Programación Orientada a Objetos Avanzada

Módulo 5: Estructuras de Datos y Colecciones

Módulo 6: Manejo de Excepciones

Módulo 7: Entrada/Salida de Archivos

Módulo 8: Multihilo y Concurrencia

Módulo 9: Redes

Módulo 10: Temas Avanzados

Módulo 11: Frameworks y Librerías de Java

Módulo 12: Construcción de Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados