Oracle a annoncé la disponibilité de Java 22, la dernière version du langage de programmation et de la plate-forme de développement numéro un. Java 22 (Oracle JDK 22) apporte des milliers d'améliorations en termes de performances, de stabilité et de sécurité pour aider les développeurs à accroître leur productivité, à stimuler l'innovation et à accélérer la croissance au sein de leur entreprise. Il s'agit notamment d'améliorations du langage Java, de ses API et de ses performances, ainsi que des outils inclus dans le kit de développement Java (JDK).

Le dernier JDK apporte des mises à jour et des améliorations grâce à 12 propositions d'amélioration du JDK (JEP). Le JDK 22 apporte des améliorations linguistiques issues du projet OpenJDK Amber (déclarations avant super[ ?], Variables non nommées et motifs, Modèles de chaîne, Classes déclarées implicitement et Méthodes principales d'instance) ; des améliorations du projet Panama (API de fonction étrangère et de mémoire et API de vecteur) ; des fonctionnalités liées au projet Loom (Concurrence structurée et Valeurs cadrées) ; des bibliothèques de base et des capacités d'outils (API de fichier de classe, Lancer des programmes de code source multi-fichiers et Collecteurs de flux) ; et des mises à jour de performance (Épinglage de région pour G1). Les principales mises à jour de Java 22 sont les suivantes : Caractéristiques du projet Amber : JEP 447 : déclarations avant super( ?): donne aux développeurs la liberté d'exprimer le comportement des constructeurs.

En permettant aux déclarations qui ne font pas référence à l'instance créée d'apparaître avant l'invocation explicite d'un constructeur, cette fonctionnalité permet un placement plus naturel de la logique qui doit être prise en compte dans les méthodes statiques auxiliaires, les constructeurs intermédiaires auxiliaires ou les arguments des constructeurs. Elle préserve également l'assurance existante que les constructeurs s'exécutent dans l'ordre descendant pendant l'instanciation de la classe, ce qui contribue à garantir que le code dans un constructeur de sous-classe ne peut pas interférer avec l'instanciation de la superclasse. En outre, cette fonctionnalité ne nécessite aucune modification de la machine virtuelle Java (JVM) et repose uniquement sur la capacité actuelle de la JVM à vérifier et à exécuter le code qui apparaît avant les invocations explicites de constructeurs à l'intérieur des constructeurs.

JEP 456 : Variables sans nom et modèles : Contribue à améliorer la productivité des développeurs en enrichissant le langage Java de variables et de motifs sans nom, qui peuvent être utilisés lorsque des déclarations de variables ou des motifs imbriqués sont nécessaires mais ne sont jamais utilisés. Cela réduit les possibilités d'erreur, améliore la lisibilité des modèles d'enregistrement et augmente la maintenabilité de l'ensemble du code. JEP 459 : Modèles de chaînes (deuxième aperçu) : simplifie le développement de programmes Java en facilitant l'expression de chaînes comprenant des valeurs calculées au moment de l'exécution, tout en améliorant la sécurité des programmes qui composent des chaînes à partir de valeurs fournies par l'utilisateur et les transmettent à d'autres systèmes. En outre, la lisibilité des expressions mélangées à du texte est améliorée, et les valeurs autres que des chaînes calculées à partir de texte littéral et d'expressions intégrées peuvent être créées sans devoir passer par une représentation intermédiaire sous forme de chaîne.

JEP 463 : Implicitly Declared Classes and Instance Main Methods (Second Preview) : aide à accélérer l'apprentissage en offrant une rampe d'accès en douceur à la programmation Java pour permettre aux étudiants d'écrire leurs premiers programmes sans avoir besoin de comprendre les caractéristiques du langage conçues pour les programmes de grande taille. Grâce à cette fonctionnalité, les enseignants peuvent introduire les concepts de manière progressive et les étudiants peuvent écrire des déclarations simplifiées pour des programmes à classe unique et développer leurs programmes de manière transparente pour utiliser des fonctionnalités plus avancées au fur et à mesure que leurs compétences se développent. Caractéristiques de Project Loom : JEP 462 : Structured Concurrency (Second Preview) : aide les développeurs à rationaliser la gestion et l'annulation des erreurs et à améliorer l'observabilité en introduisant une API pour la concurrence structurée. Cela permet de promouvoir un style de programmation concurrente qui peut éliminer les risques courants liés à l'annulation et à l'arrêt, tels que les fuites de threads et les retards d'annulation.

tels que les fuites de threads et les retards d'annulation ? et améliore l'observabilité du code concurrent. JEP 464 : Scoped Values (Second Preview) : aide à améliorer la facilité d'utilisation, la compréhension, la performance et la robustesse des projets des développeurs en permettant le partage de données immuables à l'intérieur et entre les threads.

Caractéristiques du projet Panama : JEP 454 : Foreign Function & Memory API : augmente la facilité d'utilisation, la flexibilité, la sécurité et la performance pour les développeurs en introduisant une API qui permet aux programmes Java d'interopérer avec le code et les données en dehors du temps d'exécution Java. En invoquant efficacement les fonctions étrangères telles que le code en dehors de la machine virtuelle Java et en accédant en toute sécurité à la mémoire étrangère (c'est-à-dire la mémoire non gérée par la JVM), la nouvelle API permet aux programmes Java d'appeler des bibliothèques natives et de traiter des données natives sans avoir recours à l'interface native Java. JEP 460 : API vectorielle (septième incubateur) : permet aux développeurs d'obtenir des performances supérieures aux calculs scalaires équivalents en introduisant une API pour exprimer des calculs vectoriels qui se compilent de manière fiable au moment de l'exécution en instructions vectorielles sur les architectures d'unité centrale prises en charge.

Bibliothèques et outils de base Caractéristiques : JEP 457 : Class-File API (aperçu) : Aide les développeurs à améliorer leur productivité en fournissant une API standard pour l'analyse, la génération et la transformation des fichiers de classe Java. JEP 458 : Lancement de programmes à code source multi-fichiers : permet aux développeurs de choisir si et quand configurer un outil de construction en améliorant le lanceur d'applications Java pour lui permettre d'exécuter un programme fourni sous la forme de plusieurs fichiers de code source Java. JEP 461 : Stream Gatherers (Preview) : aide les développeurs à améliorer leur productivité en améliorant l'API Stream pour prendre en charge des opérations intermédiaires personnalisées, ce qui permettra aux pipelines de flux de transformer les données d'une manière qui n'est pas facilement réalisable avec les opérations intermédiaires intégrées existantes.

En rendant les flux de données plus souples et plus expressifs et en permettant aux opérations intermédiaires personnalisées de manipuler des flux de taille infinie, cette fonctionnalité permet aux développeurs d'être plus efficaces dans la lecture, l'écriture et la maintenance du code Java.