Java

Nouveautés de Java 11

Pendant des décennies, Java a été l’un des langages de programmation les plus couramment utilisés dans les logiciels d’entreprise, et son train de versions évolue plus rapidement que jamais. À partir de Java 9, sorti en 2017, la cadence de sortie a été changée à tous les six mois. Java 10 a ajouté de nouvelles fonctionnalités à la plate-forme. Pour de nombreux utilisateurs, toutefois, les modifications apportées n’étaient pas suffisamment importantes pour justifier les efforts de migration vers Java 10. Java 11 va toutefois au-delà des nouvelles fonctionnalités et corrections de bugs classiques.

Migrer à partir d'une version antérieure de Java n'est peut-être pas aussi simple que prévu. Java 11 supprime diverses technologies et API de la plate-forme.

Malgré les obstacles potentiels, les nouvelles fonctionnalités de Java 11 font que la mise à niveau en vaut la peine.

Convergence d'Oracle JDK et OpenJDK

OpenJDK, l'équivalent Open Source du JDK Oracle, existe depuis Java 7. Pour la plupart, les fonctionnalités de langage, les bibliothèques Java principales et les outils des deux distributions sont très similaires, voire identiques. Outre ces aspects, les versions de JDK Oracle antérieures à Java 11 incluaient des fonctionnalités commerciales telles que Flight Recorder, Java Mission Control et Z Garbage Collector qui pourraient être activées en passant par l’option XX: + UnlockCommercialFeatures lors du démarrage d’une nouvelle machine virtuelle Java. Avec Java 11, les fonctionnalités commerciales deviennent gratuites et ont été ajoutées à OpenJDK.

Licence du JDK Oracle et de l’OpenJDK

Il existe un seul facteur distinctif entre le JDK Oracle et OpenJDK: le contrat de licence. OpenJDK continue d’être sous licence GNU General Public License, version 2 (GPL 2) avec une exception classpath. Cette licence vous permet d’utiliser Java pour des projets open source ainsi que des produits commerciaux sans aucune restriction ni attribution à des fins de développement et de production. L'exception classpath dissocie les conditions de licence d'OpenJDK des conditions de licence applicables aux bibliothèques externes fournies avec le programme exécutable.

En ce qui concerne le JDK Oracle, la licence est passée d’une licence BCL (code binaire) pour les technologies Oracle Java SE à une licence commerciale. Par conséquent, vous ne pouvez plus utiliser le JDK Oracle pour la production sans acheter le modèle d'abonnement Java SE.

Remarque !  Le modèle d'abonnement s'applique également à toute version de correctif Java 8 publiée après janvier 2019 si elle est utilisée pour des produits commerciaux.

Cadence de six mois pour les nouvelle versions

Aux débuts de Java, les nouvelles versions étaient un gros problème. Celles-ci ne se produisaient que tous les deux ou trois ans et contenaient de nombreuses modifications importantes, parfois radicales, telles que Génériques dans Java 5, ou des modifications de syntaxe dans Java 8, ou dans le système de modules Java 9. La migration d'un projet logiciel vers une nouvelle version de Java nécessitait souvent beaucoup de planification et d'effort. Certains projets ont même dû retarder le processus de production de logiciels jusqu'à la fin de la migration.

De nombreux leaders de l'industrie ont opté pour un modèle de distribution continue pour stimuler l'innovation et atténuer les risques: moins de changements, plus de versions. Oracle s'engage à suivre cet exemple en publiant une nouvelle version majeure tous les six mois et une version mineure tous les deux mois. Par conséquent, la mise à niveau vers une nouvelle version de Java aura moins d’impact sur votre projet.

Avec des versions plus fréquentes vient la responsabilité d'assurer la stabilité de la plate-forme. Pour cette raison, Oracle fournit une version de support à long terme tous les trois ans.

Nouvelles fonctionnalités

Pour de nombreux développeurs, la principale motivation de la mise à niveau vers une nouvelle version de Java consiste à augmenter la productivité en appliquant les dernières fonctionnalités. Dans cette section, vous découvrirez les améliorations apportées au langage et à la plate-forme introduits avec Java 11. Commençons par examiner la fonctionnalité ayant le plus fort impact: le nouveau client HTTP.

Amélioration de la communication HTTP avec HttpClient

Dans un monde de microservices et d'API de service, la communication HTTP est inévitable. Il est courant d’avoir besoin d’écrire du code qui appel un point de terminaison pour récupérer ou modifier des données. HttpURLConnection, une API pour la communication HTTP, existe depuis des siècles, mais ne pouvait répondre aux exigences des applications modernes. En conséquence, les développeurs Java devaient par le passé recourir à des bibliothèques plus avancées et plus détaillées, telles que Apache HttpComponents, qui prenait déjà en charge les communications HTTP/2 et WebSocket.

Oracle a reconnu cette lacune dans les fonctionnalités de Java et a introduit une implémentation de client HTTP en tant que fonctionnalité expérimentale avec Java 9. HttpClient a grandi et est désormais une fonctionnalité finale de Java 11. S'il existe une raison de mettre à niveau vers Java 11, c’est ça! Plus de dépendances externes que vous devez gérer dans le cadre de votre processus de construction.

En résumé, l’API HTTP de Java peut gérer les communications synchrones et asynchrones et prend en charge HTTP 1.1 et 2, ainsi que toutes les méthodes HTTP courantes telles que GET, POST, PUT et DELETE. Une interaction HTTP typique avec le module java.net.http ressemble à ceci:

  1. Créez une instance de HttpClient et configurez-la selon vos besoins.
  2. Créez une instance de HttpRequest et remplissez les informations.
  3. Transmettez la demande au client, exécutez la demande et récupérez une instance de HttpResponse.
  4. Traitez les informations contenues dans HttpResponse.

Lancer des programmes à fichier unique sans compilation

Java n'est pas un langage de script. Pour chaque programme que vous souhaitez exécuter, vous devez d’abord le compiler en exécutant explicitement la commande javac. Ce qui rend moins pratique l’essai de petits extraits de code à des fins de test.
Java 11 change cela. Vous pouvez maintenant exécuter le code source Java contenu dans un seul fichier sans avoir à le compiler au préalable.

Lancer des programmes à fichier unique sans compilation

La nouvelle fonctionnalité est un excellent point de départ pour les débutants en langage Java et permet aux utilisateurs d’essayer la logique de manière instantanée.

Lancer un programme à un seul fichier sans compilation est très pratique, mais il y a quelques limitations dont vous devez être conscient. Avec Java 11, le programme ne peut utiliser aucune dépendance externe autre que le module java.base. De plus, vous ne pouvez lancer qu'un seul programme de fichiers. L'appel de méthodes depuis d'autres fichiers source Java n'est actuellement pas pris en charge, mais vous pouvez définir plusieurs classes dans le même fichier si nécessaire.

Nouvelles méthodes pour les bibliothèque String, Collections et Files

Java 11 ajoute des méthodes pratiques aux API String, Collections et Files.

API String

L'API String ajoute quatre nouvelles méthodes pratiques.

  • String.repeat(Integer) : Il répète simplement une chaîne n fois.
  • String.isBlank() : qui indique si une chaîne est vide ou ne contient que des espaces.
  • String.strip() : prend soin de supprimer les espaces blancs de début et de fin. Vous pouvez être encore plus précis en supprimant uniquement les caractères de début en utilisant String.stripLeading() ou simplement les caractères de fin en utilisant String.stripTrailing().
  • String.lines() : vous permet de traiter des textes multilignes en tant que flux. Un flux représente une séquence d'éléments pouvant être traités séquentiellement sans avoir à charger tous les éléments en mémoire en une seule fois.
API Collections

Dans le passé, transformer une collection en tableau était fastidieux. Vous deviez fournir une nouvelle instance du tableau, son type générique et la taille finale du tableau.
Java 11 facilite la conversion. Au lieu de transmettre une instance de tableau, vous pouvez désormais fournir une fonction à l'aide de la méthode Collection.toArray (Function <T []>).

API Files

Pour les développeurs, lire et écrire des fichiers est une opération très courante. Le code antérieur à Java 11 nécessite que vous écriviez du code standard inutile. Pour résoudre ce problème, les projets introduisent généralement une méthode utilitaire réutilisable ou font appel à l'une des nombreuses bibliothèques open source.

Java 11 ajoute les méthodes Files.readString(Path) et Files.writeString(Path, CharSequence, OpenOption) avec diverses surcharges, ce qui facilite beaucoup la lecture et l'écriture de fichiers.

Optional et Predicate

Java 8 a ajouté le type optional. Ce type est un conteneur à valeur unique qui contient une valeur facultative. Son objectif principal est d'éviter d'encombrer le code de vérifications nulles inutiles. Vous pouvez vérifier si une valeur est présente dans le conteneur sans la récupérer réellement en appelant la méthode isPresent().
Dans la dernière version de Java, vous pouvez également demander l’inverse: "La valeur est-elle vide? " Au lieu d’utiliser la négation de la méthode isPresent(), vous pouvez maintenant utiliser la méthode isEmpty() pour simplifier la lecture du code.

Un Predicate (prédicat) est souvent utilisé pour filtrer des éléments dans une collection d'objets. Java 11 ajoute la méthode statique Predicate.not(Predicate), qui renvoie une instance Predicate prédéfinie qui annule le prédicat donné.

Utiliser le mot clé var  dans lambda

À partir de Java 10, vous pouvez déclarer des variables locales sans avoir à affecter le type. Au lieu de déclarer le type, la variable utilise le mot-clé var. Au moment de l'exécution, l'affectation de la variable détermine automatiquement le type. c'est inféré. Même si vous utilisez le mot clé var, la variable est toujours typée de manière statique.

Avec Java 11, vous pouvez désormais utiliser le mot-clé var pour les paramètres d’une fonction Lambda. L'utilisation de var pour les paramètres de Lambda présente un avantage majeur: vous pouvez annoter la variable. Par exemple, vous pouvez indiquer que la valeur de la variable ne peut pas être nulle en utilisant l’annotation @NotNull

Adoption d'UNICODE 10 

Java 10 utilise le standard Unicode 8 pour la localisation. La norme Unicode évoluant constamment, il était donc temps que Java 11 suive la dernière version, Unicode 10.
la mise à jour d'Unicode 8 à 10 inclut 16 018 nouveaux caractères et 10 nouveaux scripts. Un script est un ensemble de lettres et d’autres signes écrits utilisés pour représenter des informations textuelles.

Contrôle d'accès imbriqué 

Pour comprendre le prochain changement à Java 11, nous devons examiner une classe imbriquée. Supposons que vous avez une classe externe appelée Outer.java et une classe interne appelée Inner.Java. Inner.java peut accéder à tous les champs et à toutes les méthodes privés de Outer.java car ils sont logiquement liés.

Comme vous le savez peut-être, le compilateur Java crée un nouveau fichier de classe pour les classes internes, dans ce cas Outer$Inner.class. le processus de compilation crée également une méthode dite pont d'accessibilité entre les classes.

Java 11 à générer ces méthodes de pont avec l'aide de soi-disant nestmates. Les classes internes peuvent maintenant accéder aux champs et aux méthodes des classes externes sans travail supplémentaire du compilateur.

 Avant Java 11, il n'était pas possible d'accéder à un champ de la classe externe via une réflexion sans définir le contrôle d'accessibilité sur true. Avec le changement de contrôle d'accès imbriqué, ce contrôle n'est plus nécessaire.

Enregistrement des évenements OS et JVM avec JAVA FLIGHT RECORDER 

Java Flight Recorder (JFR) est un outil permettant de profiler une application Java en cours d'exécution et de capturer des diagnostics pour une analyse plus approfondie. Cet outil n'est pas nouveau en Java. Il a été intégré à Java 7, mais considéré comme une fonctionnalité commerciale. En Java 11, JFR est devenu open source et est inclus dans OpenJDK.

Performance et sécurité

Les développeurs recherchent généralement les fonctionnalités brillantes et pratiques d'une nouvelle version de Java qui affectent et améliorent directement leurs routines de travail quotidiennes. Des aspects non fonctionnels tels que les performances et la sécurité, en revanche, deviennent extrêmement importants après la mise en production de votre projet. Une application à exécution lente ne séduira pas les clients. Des failles de sécurité dans votre environnement d'exécution réduisent la confiance avec vos clients.

Ramasse-miettes 

Java 7 a introduit GarbageFirst (G1). elle est ensuite devenue la ramasse-miettes par défaut avec Java 9. G1 est optimisée pour une probabilité et un débit élevés. Comme indiqué par Thomas Schatzl, Java 11 améliore les temps de pause de près de 60% sur les processeurs x64 avec un encombrement mémoire très réduit. C’est un grand avantage pour quiconque est prêt à passer à Java 11 dans les systèmes de production.

De plus, cette version de Java introduite deux Ramasse-miettes expérimentales : Z Garbage Collector (ZGC) et EPSILON

TLS 1.3 et prise en charge des algorithmes cryptographiques

La sécurité est de la plus haute importance pour tout système logiciel. Avec la dernière version de TLS (Transport Layer Security), publiée en août 2018, les performances HTTPS sont devenues plus rapides et plus sûres que jamais. Java 11 a pu intégrer dès le départ le support du protocole TLS 1.3. Il est toutefois important de noter que TLS 1.3 ne prend pas en charge toutes les fonctionnalités offertes par le nouveau protocole TLS.

Partager ce cours avec tes amis :

Rédigé par M. ESSADDOUKI

Learning a new programming language is an easy thing, but the most difficult thing is how to design efficient algorithms for real-world problems, so don't be a programmer, be a problems solver.

Cours Similaires :