Java 9: todo lo que necesita saber sobre las características del nuevo Java
Publicado: 2018-04-24Java, el lenguaje de programación altamente accesible, ha sido una obviedad para los desarrolladores de todo el mundo. Desde su inicio en 1995, el lenguaje ha tenido un amplio uso en varias industrias.
Hoy, encontrará Java en sus teléfonos. Impulsando el sistema operativo Android y la gran variedad de aplicaciones que ofrece Android. Se utiliza para desarrollar juegos como Minecraft, que tiene una gran base de jugadores. También encuentra uso en aplicaciones comerciales como leer información de tarjetas de crédito en cajas registradoras y alimentar la información entre los sistemas y los bancos.
Después de un lapso de 3 años, Java lanzó su nueva edición: Java SE 9. Con varios cambios arquitectónicos clave y funciones complementarias, Java SE 9 ofrece una solución poderosa que los desarrolladores anhelaban.
Java 7 agregó try-with-resource en 2011, ofreciendo una mejor funcionalidad de administración de recursos.
Java 8 agregó expresiones lambda, un buen movimiento pero ligeramente defectuoso bajo el paradigma OOP.
Ahora Java Solutions permite a los programadores tener métodos privados. ¡Métodos estáticos privados! ¡Sí, lo leiste bien!
Java SE 8 ofreció muchos cambios estructurales que los desarrolladores recibieron con emociones encontradas. Principalmente, estas son las deficiencias de Java SE 8 que Java SE 9 ha tratado de superar:
- El JDK no era navegable para el pequeño dispositivo informático.
- No hubo una mejora general en el rendimiento de la aplicación.
- No había seguridad general y mantenimiento de JDK
- Los desarrolladores de Java enfrentaron dificultades para construir y mantener las bibliotecas de código y la aplicación más grande.
Entonces, echemos un vistazo a los cambios y mejoras clave que ofrece Java 9 con respecto a sus predecesores.
Procesar actualizaciones de API en Java 9
Tradicionalmente, la API de Java ha sido de naturaleza primitiva. Ese soporte para lanzar nuevos procesos, redirigir la salida y los flujos de error. En Java 9, las nuevas actualizaciones de Process API permiten:
- Obtener el PID del proceso JVM actual y cualquier otro
- Gestión de subprocesos
- Gestión de subprocesos
- Obtenga información como PID, nombre y uso de recursos de los procesos que se ejecutan en el sistema.
Este es un código de muestra, que imprime el PID actual, así como la información del proceso actual:
public class NewFeatures
{
public static void main(String [] args)
{
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("PID:"+ currentProcess.getPid());
ProcessHandle.Info currentProcessInfo = currentProcess.info();
System.out.println("Info:" + currentProcessInfo);
}
}
Cliente HTTP/2 en Java 9
Se espera que esta función se reforme en las versiones posteriores o incluso se elimine por completo.
Anteriormente, los desarrolladores confiarían en las bibliotecas de terceros, por ejemplo, Apache HTTP, Jersey y muchas más. La API HTTP de Java es anterior a la especificación HTTP/1.1 y es síncrona y difícil de mantener. Estas limitaciones requerían la necesidad de agregar una nueva API. La nueva API de cliente HTTP proporciona lo siguiente:
- Una API simple y concisa para manejar la mayoría de las solicitudes HTTP
- Compatibilidad con la especificación HTTP/2
- Mejor interpretación
- Mejor seguridad
- Algunas mejoras más
Aquí hay un fragmento de código para realizar una solicitud HTTP GET utilizando las nuevas API. Este es el módulo definido en el archivo module-info.java:
module newfeatures{
requires jdk.incubator.httpclient;
}
El siguiente código usa la API de cliente HTTP. Esta es una parte del módulo jdk.incubator.httpclient :
import jdk.incubator.http.*;
import java.net.URI;
public class Http2Feature{
public static void main(String[] args) throws Exception{
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest
.newBuilder(new URI(http://httpbin.org/get;))
.GET()
.version(HttpClient.Version.HTTP_1_1)
.build();
HttpResponse.String response = client.send(request,
HttpResponse.BodyHandler.asString());
System.out.println("Status code:" + response.statusCode());
System.out.println("Response Body:" + response.body());
}
}
}
Más funciones de actualizaciones de concurrencia en Java 9
Con Java 9, se introdujo una nueva clase llamada: java.util.concurrent.Flow, que admite la implementación de un marco de publicación y suscripción. Este marco permite a los desarrolladores construir componentes. Estos componentes pueden consumir de forma asíncrona un flujo de datos en vivo configurando publicadores que producen los datos y suscriptores que consumen los datos. Estas son las nuevas interfaces:
- java.util.concurrent.Flow.Publisher
- java.util.concurrent.Flow.Subscriber
- java.util.concurrent.Flow.Subscription
- java.util.concurrent.Flow.Processor (que actúa como publicador y suscriptor).
Java Shell Scripting (Read-Eval-Print-Loop) en Java 9
El objetivo del Proyecto Kulla era investigar la adición de la herramienta REPL (Read-Eval-Print-Loop) para Java 9. Esta versión de Java presenta una herramienta de línea de comando especial llamada JShell. El objetivo aquí es popularizar y maximizar el uso de REPL. ¿Entonces que significa eso? Ahora, no necesita envolver algunas líneas de código en un método separado para ejecutarlas. ¿Eficiente? Yo digo si.
Por ejemplo, en Scala, un programa sencillo de Hello World se escribe como scala>println(“Hello World”);
Ejecutemos el comando JShell, como se muestra en la siguiente imagen:
Proyecto Jigsaw en Java 9
La carta de triunfo de las nuevas funciones de Java 9 es el sistema de módulos completamente nuevo. La creación de sistemas complejos a menudo implica códigos complejos de alto nivel que resultan en ambigüedad. Con la complejidad del código, se enfrentan dos problemas fundamentales: la encapsulación del código es difícil y no existe una noción de dependencias explícitas entre los diferentes archivos JAR de un sistema. Cualquier otra clase pública en el classpath puede acceder a cada clase pública. Esto conduce al uso innecesario de clases que no estaban destinadas a ser una API pública. Además, el classpath en sí mismo es problemático: ¿cómo sabe si todos los JAR requeridos están allí y qué pasa con las entradas duplicadas? El sistema de módulos resuelve ambos problemas.
Aquí es donde se ve la naturaleza robusta de Java 9. Los archivos JAR modulares contienen un descriptor de módulo adicional. En este descriptor de módulo, las declaraciones `requires` se utilizan para expresar dependencias en otros módulos. Además, las declaraciones `exportaciones` controlan qué paquetes son accesibles para diferentes módulos. De forma predeterminada, todos los paquetes no exportados se encapsulan en el módulo.
Existen diversas JEP, que forman parte de este proyecto, a saber:
JEP 200: JDK modular: aplica el sistema de módulos de la plataforma Java para modularizar el JDK que se puede combinar en tiempo de compilación, tiempo de construcción o tiempo de ejecución.
JEP 201 - código fuente modular: se utiliza para crear módulos y permite construir herramientas para compilar los módulos creados
JEP 220: imágenes de tiempo de ejecución modulares: este JEP mejora el rendimiento, la seguridad y la capacidad de mantenimiento al reestructurar las imágenes de tiempo de ejecución de JDK y JRE para acomodar módulos.
JEP 282: el jlink, conocido como enlazador de Java: usos como módulos de empaquetado y sus dependencias en menos tiempos de ejecución.
Archivos JAR de varias versiones
Para aprovechar las nuevas funciones de la plataforma Java en las versiones más nuevas, los desarrolladores de la biblioteca deben lanzar una versión más nueva de su biblioteca. Pronto, los desarrolladores mantendrán múltiples versiones de la biblioteca, lo que puede ser catastrófico. Para superar esta limitación, Java 9 presenta versiones múltiples de archivos JAR que permiten a los desarrolladores crear archivos JAR con diferentes versiones de archivos de clase para diferentes versiones de Java. Echale un vistazo a éste ejemplo.
Una ilustración de los archivos JAR actuales de la siguiente manera:
raíz de tarro
- Una clase
– Clase B
– Clase C
Así es como se ven los archivos JAR de varias versiones:
raíz de tarro
- Una clase
– Clase B
– Clase C
– META-INF
– versiones
– – 9
- - - - Una clase
– – 10
– – – – Clase B
En la ilustración anterior, los archivos JAR admitían archivos de clase para dos versiones de Java, la 9 y la 10. Por lo tanto, cuando se ejecuta el JAR en la versión 9 de Java, la clase A en las carpetas de las versiones 9 se selecciona para su ejecución.
Las versiones anteriores de Java que no admiten archivos JAR de versiones múltiples, las clases en el directorio de versiones nunca se usan. Por lo tanto, si ejecuta el archivo JAR de versiones múltiples en Java 8, es tan bueno como ejecutar un archivo JAR simple.
En mi opinión, las cosas están empezando a cambiar con Java. Y esta es una tendencia creciente. ¿Significa que la popularidad de Java y su uso se verán afectados? De nada. Java ha sido y sigue siendo un lenguaje de programación increíblemente poderoso y robusto en la industria tecnológica actual. Empiece a aprender Java y observe cómo marca la diferencia en su carrera. ¡Buena suerte!
Nota del autor:
Ese artículo tecnológico es aportado por Sumit, que trabaja en tecnologías de tendencia como DevOps, Big Data y Python. Y en el equipo de Marketing Digital de Edureka.