Java evolue rapidement avec un nouveau JDK tous les six mois, et les equipes qui restent sur des versions anciennes passent a cote de gains majeurs en productivite et en performance. Cette formation synthetise les nouveautes des JDK 8 a 22 : expressions lambda, API Streams et DateTime, systeme de modules, Records, Sealed Classes, et les Virtual Threads qui transforment la programmation concurrente. Vous repartirez avec une vision claire des fonctionnalites a adopter pour moderniser vos projets existants.
Public visé
Développeurs, architectes et chefs de projets techniques.
Prérequis
Avoir suivi cette formation, ou en maîtriser les thèmes abordés :
Objectifs pédagogiques
À l’issue de cette formation, vous serez capable de :
- Exploiter les fonctionnalités majeures des JDK 8 à 22
- Utiliser les expressions lambda, les streams et les API DateTime
- Gérer les modules
- Reconnaître les améliorations du langage
Programme
Jour 1
Rappels des apports en programmation concurrente (JDK 7 et plus)
- Le package java.util.concurrent
- Les facilités apportées pour le multi-threading et la programmation parallèle
- Le Fork and Join
Travaux pratiques
- Mise en oeuvre d’un programme utilisant le pattern Fork and Join
Les lambda en Java (JDK 8 et plus)
- S’approcher de lambda sans Java 8
- Les lambda expressions
- Les interfaces fonctionnelles
- Liste des interfaces fonctionnelles
- Paramètres d’une lambda expression
- Cas d’utilisation des lambda expressions
- Les références de méthode dans les lambda expressions
Travaux pratiques
- Création d’un nouveau projet
- Utilisation des interfaces fonctionnelles fournies et créées
- Utilisation des lambda expressions sous différentes formes
- Simplification de la programmation avec les lambda
Les streams (JDK 8 et plus)
- Présentation générale des streams
- Créer des streams
- Opérations intermédiaires sur les streams
- Opérations terminales
Travaux pratiques
- Création d’un nouveau projet
- Application de la gestion des streams à des flux de données fournis
- Opérations de création, intermédiaires et finales
L’API DateTime (JDK 8 et plus)
- Classes importantes de DateTime
- Utilisation de DateTime
Travaux pratiques
- Exploitation de l’API DateTime
Jour 2
Le système de modules (JDK 9 et plus)
- Architecture et modularité dans le JDK 9
- La déclaration des modules
- Requires
- Exports
- Uses
- Provides
- With
- Opens
- Les mots réservés
- Exemples des classes d’applications modularisées
- Le fichier module-info.java
- Le graphe de dépendances
- Lancer une application à partir des modules
- Le packaging des modules et les JAR
- Exporter un package pour l’utiliser ailleurs
- Encapsulation forte et accessibilité
Travaux pratiques
- Création d’une application utilisant les modules
- Migration d’une application non modulaire vers le système de module
- Compatibilité du système modulaire avec l’existant
JShell (JDK 9 et plus)
- Introduction à JShell
- Exécuter et tester du code à la volée
Travaux pratiques
- Utilisation de l’outil JShell
L’API Optional (JDK 9 et plus)
- Les méthodes
- or()
- ifPresent()
- ifPresentOrElse()
- stream()
Travaux pratiques
- Exploitation de l’API Optional afin de gérer les références nulles
L’API Process (JDK 9 et plus)
- Gestion des process lancés
- L’interface ProcessHandle
Travaux pratiques
- Création d’un outil d’administration des process lancés
Jour 3
Autres apports de la JDK 9
- Améliorations des streams Java 8
- L’API HTTP 2
- Nouvelles collections
- Les Reactive Streams, les streams asynchrones
- Méthodes privées d’interface
- L’API CompletableFuture
Travaux pratiques
- Utilisation des Reactive Streams
Apports de la JDK 10
- Inférence de type de variables locales
- Améliorations dans les API existantes
Apports de la JDK 11
- Inférences de type pour les lambda expressions
- Simplification des “run” de programmes
- Améliorations dans les classes String, StringBuilder et StringBuffer
- Améliorations des Predicate Java 8
- Classes imbriquées et visibilité des attributs
- Suppression des modules JEE, JavaJX et CORBA
Travaux pratiques
- Test des fonctionnalités apportées par la JDK 11
Apports de la JDK 12 et 13
- Le switch comme instruction
- Les blocs de texte
- Le mot-clé “yield”
- Les outils apportés par la JDK 12
Travaux pratiques
- Test des fonctionnalités apportées par les JDK 12 et 13
Apports de la JDK 14
- Changements dans les switch
- Clarifications du NullPointerException
- Le Live Monitoring
- Changements dans le “instanceof”
- Nouveaux outils associés à la JDK 14
Apports de la JDK 15
- Les classes “Sealed”
- Fonctionnalités dépréciées
Apports de la JDK 16
- L’outil “jpackage”
Apports de la JDK 17
- Interfaces “Sealed”
- Les “Type Records”
Travaux pratiques
- Test des fonctionnalités apportées par les JDK 14 à 17
Apports de la JDK 18
- Le Simple Web Server
Apports de la JDK 19, 20 et 21
- Les projets Amber, Panama et Loom
- Les threads virtuels pour l’optimisation des ressources
- L’interface Thread. Builder et la méthode VirtualThreadStart
- La Structured Concurrency
- Amélioration du switch
- Les Record Patterns et la déconstruction
- Les String Templates
- Les Foreign Functions et Memory API
- Accès aux données Off-Heap
- L’API Vector
- Modifications dans HashMap et HashSet
- Les Scoped Values vs ThreadLocal
Apports de la JDK 22
- Les unnamed variables et patterns
- Les classes déclarées implicitement
- Modifications dans l’appel de l’instruction “super”
- Les Stream Gatherers
- L’API Class-File
- Le lancement de programmes multi source sans compilation
Travaux pratiques
- Test des fonctionnalités apportées depuis les JDK 18 à 22
Modalités d’évaluation des acquis
En cours de formation, par des travaux pratiques. En fin de formation, par un questionnaire d’auto-évaluation.
Voir aussi
Vous serez peut-être intéressés par les formations suivantes :
Formation DEV-JAVA-320 — Java - Nouveautés versions 8 à 22. Domaine : Développement. Niveau : Avancé. Durée : 3 jours (21 heures). Mots-clés : java, nouveautés, lambda, streams, modules, perfectionnement. Cylian Formation, Dijon.