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
- Sistema de Módulos (Project Jigsaw)
- JShell: El REPL de Java
- Mejoras en la API de Flujo
- Interfaz de Métodos Privados
- Var: Inferencia de Tipos Locales (Java 10)
- API de Colecciones Inmutables (Java 10)
- Garbage Collector Mejorado (Java 11)
- Nuevas Características de Java 12 y Más Allá
- Ejercicios Prácticos
- Conclusión
- 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
Explicación
module com.example.myapp {}
: Define un módulo llamadocom.example.myapp
.requires java.base;
: Indica que este módulo depende del módulojava.base
.exports com.example.myapp.api;
: Expone el paquetecom.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.
- 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
Explicación
jshell>
: Indica el prompt de JShell.int x = 10;
: Declara una variablex
y la inicializa con10
.System.out.println(x * 2);
: Imprime el resultado dex * 2
.
Ejercicio
Ejercicio 2: Usa JShell para experimentar con diferentes operadores y estructuras de control.
- 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ónn < 5
sea verdadera.
Ejercicio
Ejercicio 3: Usa dropWhile
para omitir elementos de un flujo hasta que se cumpla una condición.
- 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 interfazMyInterface
.
Ejercicio
Ejercicio 4: Crea una interfaz con un método privado y un método público que lo utilice.
- 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
Explicación
var list = new ArrayList<String>();
: Declara una variablelist
cuyo tipo es inferido comoArrayList<String>
.
Ejercicio
Ejercicio 5: Usa var
para declarar variables en un programa simple.
- API de Colecciones Inmutables (Java 10)
Descripción
Java 10 introdujo métodos para crear colecciones inmutables de manera más sencilla.
Ejemplo
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
.
- 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.
- 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 deswitch
para asignar valores.
Ejercicio
Ejercicio 8: Usa text blocks
para definir una cadena multilínea en Java 13 o posterior.
- 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.
- 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
- Introducción a Java
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Operadores
Módulo 2: Flujo de Control
Módulo 3: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Métodos
- Constructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Programación Orientada a Objetos Avanzada
Módulo 5: Estructuras de Datos y Colecciones
Módulo 6: Manejo de Excepciones
- Introducción a las Excepciones
- Bloque Try-Catch
- Throw y Throws
- Excepciones Personalizadas
- Bloque Finally
Módulo 7: Entrada/Salida de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Flujos de Archivos
- BufferedReader y BufferedWriter
- Serialización
Módulo 8: Multihilo y Concurrencia
- Introducción al Multihilo
- Creación de Hilos
- Ciclo de Vida de un Hilo
- Sincronización
- Utilidades de Concurrencia
Módulo 9: Redes
- Introducción a las Redes
- Sockets
- ServerSocket
- DatagramSocket y DatagramPacket
- URL y HttpURLConnection