Java 9 - Tout ce que vous devez savoir sur les fonctionnalités du nouveau Java

Publié: 2018-04-24

Java, le langage de programmation hautement accessible, est une évidence pour les développeurs du monde entier. Depuis sa création en 1995, le langage a été largement utilisé dans diverses industries.

Aujourd'hui, vous trouverez Java sur vos téléphones. Alimenter le système d'exploitation Android et la myriade d'applications proposées par Android. Il est utilisé pour développer des jeux comme Minecraft qui a une énorme base de joueurs. Il trouve également une utilisation dans des applications professionnelles telles que la lecture des informations de carte de crédit dans les caisses des magasins et la transmission des informations entre les systèmes et les banques.

Après un intervalle de 3 ans, Java a déployé sa nouvelle édition - Java SE 9. Avec plusieurs changements architecturaux clés et des fonctionnalités complémentaires, Java SE 9 offre une solution puissante à laquelle les développeurs aspiraient.

Java 7 a ajouté try-with-resource en 2011, offrant une meilleure fonctionnalité de gestion des ressources.
Java 8 a ajouté des expressions lambda, une bonne décision mais légèrement défectueuse sous le paradigme OOP.

Désormais, Java Solutions permet aux programmeurs d'avoir des méthodes privées. Méthodes statiques privées ! Oui, tu l'as bien lu!

Java SE 8 offrait de nombreux changements structurels qui ont été reçus avec des émotions mitigées par les développeurs. Ce sont principalement les lacunes de Java SE 8 que Java SE 9 a tenté de surmonter :

  1. Le JDK n'était pas navigable pour le petit appareil informatique
  2. Il n'y a pas eu d'amélioration globale des performances de l'application
  3. Il n'y avait pas de sécurité globale et de maintenance du JDK
  4. Les développeurs Java ont rencontré des difficultés pour créer et maintenir les bibliothèques de code et une application plus large

Alors, regardons les principaux changements et améliorations que Java 9 offre par rapport à ses prédécesseurs

Traiter les mises à jour de l'API dans Java 9

Traditionnellement, l'API de Java était de nature primitive. Cela prend en charge le lancement de nouveaux processus, la redirection des sorties et des flux d'erreurs. Dans Java 9, les nouvelles mises à jour de l'API Process permettent :

  1. Obtenir le PID du processus actuel et de tout autre processus JVM
  2. Gestion des sous-processus
  3. Gestion des sous-processus
  4. Obtenez des informations telles que le PID, le nom et l'utilisation des ressources des processus en cours d'exécution dans le système.

Ceci est un exemple de code, qui imprime le PID actuel ainsi que les informations de processus actuelles :

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);
}
}

Client HTTP/2 en Java 9

Cette fonctionnalité devrait être réformée dans les versions ultérieures ou peut même être complètement supprimée.
Auparavant, les développeurs s'appuyaient sur les bibliothèques tierces, par exemple Apache HTTP, Jersey, etc. L'API HTTP de Java est antérieure à la spécification HTTP/1.1 et est synchrone et difficile à maintenir. Ces limitations ont nécessité l'ajout d'une nouvelle API. La nouvelle API client HTTP fournit les éléments suivants :

  1. Une API simple et concise pour traiter la plupart des requêtes HTTP
  2. Prise en charge de la spécification HTTP/2
  3. Meilleure performance
  4. Meilleure sécurité
  5. Quelques améliorations supplémentaires

Voici un extrait de code pour effectuer une requête HTTP GET à l'aide des nouvelles API. C'est le module tel que défini dans le fichier module-info.java :

module newfeatures{
requires jdk.incubator.httpclient;
}

Le code suivant utilise l'API client HTTP. Ceci fait partie du module 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());
}
}
}

Plus de fonctionnalités de mises à jour simultanées dans Java 9

Avec Java 9, une nouvelle classe appelée - java.util.concurrent.Flow a été introduite, qui prend en charge la mise en œuvre d'un framework de publication-abonnement. Ce framework permet aux développeurs de créer des composants. Ces composants peuvent consommer de manière asynchrone un flux de données en direct en configurant des éditeurs qui produisent les données et des abonnés qui consomment les données. Voici les nouvelles interfaces :

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (qui agit à la fois comme éditeur et abonné).

Java Shell Scripting (Read-Eval-Print-Loop) dans Java 9

L'objectif du projet Kulla était d'étudier l'ajout de l'outil REPL (Read-Eval-Print-Loop) pour Java 9. Cette version de Java comprend un outil de ligne de commande spécial appelé JShell. L'objectif ici est de populariser et de maximiser l'utilisation de REPL. Alors qu'est-ce que cela signifie? Désormais, vous n'avez plus besoin d'encapsuler quelques lignes de code dans une méthode distincte pour les exécuter. Efficace? Je dis oui.
Par exemple, dans Scala, un simple programme Hello World s'écrit scala>println("Hello World");
Exécutons la commande JShell, comme illustré dans l'image suivante :

langage de programmation, java 9

Puzzle de projet en Java 9

L'atout principal des nouvelles fonctionnalités de Java 9 est le tout nouveau système de modules. La création de systèmes complexes implique souvent des codes complexes de haut niveau qui entraînent une ambiguïté. Avec la complexité du code, deux problèmes fondamentaux sont rencontrés : l'encapsulation du code est difficile, et il n'y a pas de notion de dépendances explicites entre les différents fichiers JAR d'un système. Chaque classe publique est accessible par n'importe quelle autre classe publique sur le chemin de classe. Cela conduit à une utilisation inutile de classes qui n'étaient pas censées être des API publiques. De plus, le classpath lui-même est problématique : comment savoir si tous les fichiers JAR requis sont présents et qu'en est-il des entrées en double ? Le système de module résout les deux problèmes.
C'est là que la nature robuste de Java 9 se voit. Les fichiers JAR modulaires contiennent un descripteur de module supplémentaire. Dans ce descripteur de module, les instructions `requires` sont utilisées pour exprimer des dépendances sur d'autres modules. De plus, les instructions `exports` contrôlent quels packages sont accessibles aux différents modules. Par défaut, tous les packages non exportés sont encapsulés dans le module.

Il existe différents PEC, qui font partie de ce projet, comme suit :

JEP 200 - JDK modulaire : cela applique le système de modules de la plate-forme Java pour modulariser le JDK qui peut être combiné au moment de la compilation, de la construction ou de l'exécution.
JEP 201 - code source modulaire : utilisé pour créer des modules et permet de créer des outils pour compiler les modules créés
JEP 220 - images d'exécution modulaires : cette JEP améliore les performances, la sécurité et la maintenabilité en restructurant les images d'exécution JDK et JRE pour accueillir les modules
JEP 282 - Le jlink, connu sous le nom de Java linker : utilisations en tant que modules d'emballage et leurs dépendances en moins de temps d'exécution.

Fichiers JAR multi-versions

Pour tirer parti des nouvelles fonctionnalités de la plate-forme Java sur les versions plus récentes, les développeurs de bibliothèques doivent publier une version plus récente de leur bibliothèque. Bientôt, plusieurs versions de la bibliothèque seront maintenues par les développeurs, ce qui peut être catastrophique. Pour surmonter cette limitation, Java 9 propose plusieurs versions de fichiers JAR permettant aux développeurs de créer des fichiers JAR avec différentes versions de fichiers de classe pour différentes versions de Java. Jetez un oeil à cet exemple.

Une illustration des fichiers JAR actuels comme suit :

racine de bocal
- Une classe
– Classe B
– Classe C

Voici à quoi ressemblent les fichiers JAR multi-version :

racine de bocal

- Une classe
– Classe B
– Classe C
– META-INF
– versions
– – 9
- - - - Une classe
- - dix
– – – – Classe B

Dans l'illustration précédente, les fichiers JAR prenaient en charge les fichiers de classe pour deux versions Java 9 et 10. Ainsi, lorsque le JAR est exécuté sur la version 9 de Java, les dossiers A.class sous les versions - 9 sont sélectionnés pour exécution.

Les versions antérieures de Java ne prenant pas en charge les fichiers JAR multi-versions, les classes sous le répertoire versions ne sont jamais utilisées. Ainsi, si vous exécutez le fichier JAR multi-version sur Java 8, cela revient à exécuter un simple fichier JAR.

À mon avis, les choses commencent à changer avec Java. Et c'est une tendance croissante. Cela signifie-t-il que la popularité de Java et son utilisation seront affectées ? Pas du tout. Java a été et est toujours un langage de programmation incroyablement puissant et robuste dans l'industrie technologique aujourd'hui. Commencez à apprendre Java et regardez-le faire une différence dans votre carrière. Bonne chance!

Note de l'auteur:
Cet article technique est fourni par Sumit qui travaille sur des technologies tendances telles que DevOps, Big Data et Python. Et dans l'équipe de marketing numérique d'Edureka.