SlideShare une entreprise Scribd logo
Nouveautés Java 9 & un aperçu Java 10 et 11
JDK : release
§ Jusqu'à Java 9 :
§ fonctionnement en features release :
§ Une liste de fonctionnalités été définie pour une release
§ La date de release été planifiée : généralement une toute les 2 ans
§ Dès qu'une fonctionnalités prenait plus de temps : la release est décalée
§ Conséquence :
§ Des releases de tailles importantes difficile à sortir
§ Des releases de 3 ans plutôt que 2 : 3,5 ans entre Java 8 et 9 !
§ Compliqué à prendre en main par les développeurs
JDK : release
§ Depuis Java 10 :
§ Dès qu'une fonctionnalité est prête on l'intègre dans la future release
§ On release à date ce qui est intégré.
§ Conséquence :
§ Des releases tous les 6 mois
§ Des releases plus petites et donc faciles à livrer et à intégrer pour les
développeurs
§ Un développement plus facile et rapide de fonctionnalités dans Java
JDK : Support
§ Depuis Java 10 on a donc une release tous les 6 mois.
§ Toutes les 6 releases => une release Long Term Support -- LTS.
§ La politique de support gratuit a changé :
§ Une release non-LTS est supportée 6 mois
§ Une release TS est supportée au minimum 3 ans
§ Java 8 sera EOL en 2019
§ Oracle fournit du support étendu payant
§ Pas de panique, d'autres vont proposer du support étendu gratuit :)
JDK : Distribution
§ OpenJDK est le projet open source d'implémentation du langage Java et de
la JVM.
§ Beaucoup d'organisations participent à ce projet.
§ Oracle est une de ces organisations (la principale).
§ Depuis Java 11, Oracle fournit deux distributions d'OpenJDK qui sont
identiques en terme de fonctionnalités :
§ OpenJDK : support limité dans le temps
§ OracleJDK : support étendu payant
JDK : Distribution
§ Il existe beaucoup d'autres distributions de Java, dont certaines
proposent déjà un support plus étendu qu'OpenJDK :
§ Azul : Zing (payant) et Zulu (gratuit)
§ AdoptOpenJDK
§ RedHat
§ Eclipse via OpenJ9 (implémentation IBM)
§ Amazon Corretto
§ Certaines de ces distributions ont un support (et donc des mise à jour)
gratuit sur une période plus grande qu'OpenJDK.
Java 9 : Modules
C’est quoi un Module :
§ A Module is a self-describing collection of Code, Data and some
Resources.
§ It is a set of related Packages, Types (classes, abstract classes,
interfaces etc) with Code & Data and Resources.
§ Each Module contains only a set of related code and data to support
Single Responsibility (Functionality) Principle (SRP).
Java 9 : Modules
Nouveautés Java 9-10-11
Pourquoi les Modules
§ Chargement de classe à la demande : new
§ Chargement linaire de classes : la classloader charge les classes
linéairement et s’arrête à la première classe correspondant au nom
complet demandé.
§ Duplication de classes : pas de vérification à l’exécution sur l’existence
de plusieurs occurrences d’une même classe.
§ Vérification de présence dépendances de tous les jars / classes
nécessaires au bon fonctionnement de l’application.
§ Le classpath est plat sans aucune notion de dépendances entre les
jars.
Pourquoi les Modules
§ L’ordre des jars dans le classpath est important.
Pourquoi les modules : programmation par
module
Pourquoi les Modules : Sécuriser la visibilité
Pourquoi les Modules : réflexivité
Nouveautés Java 9-10-11
Modules providers : ServiceLoader
§ Un mécanisme intégré simple et facile à utiliser
pour le chargement dynamique des implémentations d'interface
§ De nombreuses API Java sont implémentées sur la base du ServiceLoader
Modules providers : ServiceLoader
Automatic Module : Anciens Jars
Limitations:
If jar name contains – or . characters at that time module-info.java does not allowed module name with – or .
i.e: require gauva-11.5
gauva-11.5 is invalid. In this case rename jar file and remove – or . characters from jar file.
Java 9 jshell: The Java Shell (Read-Eval-Print Loop)
§ Beaucoup de langages (ruby, scala, python, …) proposent une Read-
Evaluate-Print-Loop (REPL), un shell.
§ Permet un apprentissage aisé du langage
§ Eviter le cérémonial d’édition, de compilation, de packaging du code.
§ Avec Java 9, apparait jshell, le REPL de java !
Java 9 : Jshell
Java 9 : Underscore (“_”)
Java 9 : Factory Methods Collections
§ L'un des plus grand changement en terme d’API : des méthodes
statiques pour la création de collection immuable.
§ Cible : création de petite collections (list, set, map).
§ La performance et l’utilisation mémoire ont été au centre de
l’implémentation de ces collections.
Java 9 : List, Set, Map of
§ Ces méthodes retournent une List, un Set ou une Map immuables
Jdk8
Jdk9
Java 9 : List, Set, Map of
Java 9 : Nouvelles méthodes
§ Classe Stream : takeWhile, dropWhile, ofNullable et iterate.
§ Classe Optional : ifPresent, ifPresentOrElse, or et stream..
§ Arrays : Beaucoup de nouvelles méthodes permettant de comparer des tableaux :
§ Arrays.equals()
§ Arrays.compare()
§ Arrays.compareUnsigned()
§ Arrays.mismatch()
Java 9 : Performance compact Strings
§ Avant Java 9 : String étaient stockées en UTF-16, chaque caractère
prenait donc deux octets car stockés dans un tableau de char.
§ Avec Java 9 : Revue de l’implémentation des String en Java pour en
proposer une version plus compact en cas de String compatible ISO-
8859-1 (ou Latin-1).
§ UTF-16 : chaque caractère est stocké sur deux octets.
§ ISO-8859-1 chaque caractère est stocké sur un octets.
Java 9 : Performance Indify String
Concatenation
§ Avant Java 6 =>
entraîne la création de 6 String car les String sont immuable : s, « toto », « tata »,
« titi », »tototata », « tototatatiti », « tototatatititutu » … pour finir par ne garder
que s et donc les autres objets seront nettoyés par GC (la Garbage Collector).
§ Depuis Java 6 : le compilateur Java (javac) essaye d’optimiser, en
remplaçant, lors de la compilation, les concaténations par l’usage de
StringBuilder. Il remplace donc le code précédent par :
§ Avec Java 9 : utilisation du bytecode InvodeDynamic lors de la concaténation
de String et l’implémentation au runtime d’une stratégie de concaténation
optimisée directement au sein de la JVM.
Java 9 : Enhanced Deprecation
§ Ajout de deux attributs à l'annotation @Deprecated :
§ since : depuis quelle version l'API est dépréciée.
§ forRemoval : mettre à true (par défaut false) si l'API sera supprimée dans une
future release.
§ Le but est de faciliter le cycle de vie des applications et de permettre,
peut-être plus sereinement, de supprimer dans le futur certaines API
du JDK lui-même.
Java 9 : interface avec Méthode privée
§ Avec Java 8 :
§ Constant variables
§ Abstract methods
§ Default methods
§ Static methods
§ Avec Java 9 : Méthode privée dans les interfaces : permet la
factorisation de code de méthode statique dans une même interface.
§ Private methods
§ Private Static methods
Java 9 : Objects
§ Objects.requireNonNullElse(T obj, T defaultObj) : retourne le premier
éléments si non null, sinon le deuxième. Si les deux sont null :
NullPointerException
§ Objects.requireNonNullElseGet(T obj, Supplier supplier) : retourne le
premier éléments si non null, sinon appel le supplier.get().
§ int Objects.checkIndex(int index, int length) : check de l’index : génère un
IndexOutOfBoundsException si l’index est inférieur à 0 ou supérieur ou
éagle à la taille. Cette méthode peut-être optimisée par le JVM.
§ int Objects.checkFromToIndex(int fromIndex, int toIndex, int length) :
idem mais pour le sous-range fromIndex/toIndex
§ int Objects.checkFromIndexSize(int fromIndex, int size, int length) : idem
mais pour le sous-range fromIndex/fromIndex + size
Java 9 : Javadoc
Remise en forme légère au niveau graphique de la javadoc :
§ Passage à HTML5,
§ Support des commentaires javadoc dans les déclarations de modules
§ Ajout d'une zone de recherche.
Java 9 : HTTP/2 Client (Incubator)
§ Une nouvelle API a été créée pour proposer une implémentation plus
simple à utiliser que la très ancienne HttpURLConnection
§ Nouveau client HTTP au goût du jour, synchrone ou asynchrone (alors
basé sur les CompletableFuture).
Java 9 : HTTP/2 Client (Incubator)
Java 9 : Stack-Walking API
• En Java 8 et versions antérieures, la méthode getStackTrace de la
classe Thread permettait déjà d’obtenir la stack trace ..: mais n’offrait
pas la même richesse de filtres, d’assertion et de récupération (stack
trace courte ou complète).
• Nouvelle API :
• pour récupérer la stack trace du thread courant,
• de naviguer et d’interagir avec ses éléments.
• de filtrer les classes en supprimant par exemple toutes les mentions de
framework/proxies pour ne conserver que les classes métiers de l’application.
Java 9 : Stack-Walking API
Java 9 : Process API Updates
Java 9 : Process API Updates
Java 9 : Reactive Stream avec Flow API
Java 9 : Reactive Stream avec Flow API
Publisher<T> :
§ Représente l’entité émettrice (émetteur) du flux d’événements/données.
§ Le type générique T représente le type de la donnée qui sera émise
(Integer,String, Objet ou autre classe).
§ La méthode déclarée subscribe permet d’abonner une ou plusieurs entités
réceptrice (subsrciber)
Java 9 : Reactive Stream avec Flow API
Subsriber<T> :
§ Représente l’entité réceptrice (abonné) du flux d’événements/données.
§ Le type générique T représente le type de la donnée qui sera réceptionnée.
Donc pour qu’un abonné soit rattaché à un émetteur il faut qu’il ait le
même type générique T.
§ Les méthodes de cette interface permettent de
§ onSubscribe : définir une action à entreprendre avant l’appel de n’importe quelle
méthode de cet abonné et ce pour l’abonnement subscription passé en paramètre.
§ onNext : définir une action à entreprendre dans cet abonné lorsqu’une émission a
lieu.
§ onError : définir une action à entreprendre dans cet abonné lorsqu’une erreur a lieu
lors de l’émission.
§ onComplete : définir une action à entreprendre lorsque l’émetteur termine l’émission
de toutes les données du flux.
Java 9 : Reactive Stream avec Flow API
Processor<I,O> :
§ Permet de transformer les données entre Publisher et Subsriber.
Java 10 : Inférence de type variables locales
§ C’est LA grande nouveauté de Java 10 : la possibilité d’utiliser le mot
clé var à la place d’une déclaration standard de variable, à l’intérieur
d’une méthode (variable locale) quand le type peut être inféré par le
compilateur.
§ En attendant :
Java 10 : Inférence de type variables locales
Restrictions :
§ Une variable doit être initialisée avec valeur non null :
var x; //No!!!, var x = null; //No!
§ var x=0,y=0; // no!
§ Modification de type :
var x=0; //Inferred to be of type 'int'
var x="c"; //No! - incompatible types!
Java 10 : Nouvelles méthodes
§ Optional : orElseThrow() alternative get()
§ List, Set et Map : copyOf, copie immuable
§ Collectors Stream : création de collection immuable
§ Collectors.toUnmodifiableList(),
§ Collectors.toUnmodifiableSet(),
§ Collectors.toUnmodifiableMap(keyFunc, valueFunc),
§ Collectors.toUnmodifiableMap(keyFunc, valueFunc,
mergeFunc).
Java 10: Reader.transferTo(Writer)
§ Un nouvelle méthode à la classe Reader de directement transférer
tout les caractère d’un Reader à un Writer :
Java 10 : Performance Parallel Full GC for G1
§ G1 est depuis Java 9 l’algorithme de Garbage Collection par défaut.
Hors dans celui-ci, quand le collector n’arrive plus à nettoyer assez
rapidement la heap de manière concurrente, il déclenche un Full GC
qui était mono-threadé.
§ Depuis Java 10 l’implémentation de celui-ci a été changée en multi-
threadé, le nombre de threads étant définit par -XX:ParallelGCThreads
Java 11
§ Première version LTS (Long Term Support) de 3 ans => prochaine LTS
Java 17
§ Support Java 8 jusqu’en 2019 (commerciale), 2020 (personnelle) =>
sinon (25$/mois/cpu core)
§ Plus de support Java 10
Java 11 : Local-Variable Syntax for Lambda
Parameters
§ Permet l’utilisation du mot clé var les signatures des lambdas.
§ But : permettre d'ajouter des modificateurs (ex: annotations) sans
nécessité de mettre le type.
Java 11 : nouvelles méthodes
String :
§ repeat(int) - Repeats the String as many times as provided by the int parameter
§ lines() - Uses a Spliterator to lazily provide lines from the source string
§ isBlank() - Indicates if the String is empty or contains only white space characters
§ stripLeading() - Removes the white space from the beginning
§ stripTrailing() - Removes the white space from the end
§ strip() - Removes the white space from both, beginning and the end of string
File :
§ writeString(): This is to write some content in a file.
§ readString(): This is used to read the contents of a file.
§ isSameFile(): This method is used to know whether two paths locate the same file or not.
TimeUnit Conversion : This method is used to convert the given time to a unit like DAY, MONTH, YEAR and for time too.
Java 11 : nouvelles méthodes
TimeUnit Conversion : This method is used to convert the given time to a unit like DAY, MONTH, YEAR and for time too.
§ Optional: isEmpty() This method returns true if the value of any object
is null and else returns false.
§ Predicate.not: négation d’un prédicat.
§ Affichage de la taille du tableau dans le message de l’exception
ArrayIndexOutOfBoundsException.
Java 11 : Launch Single-File Source-Code Programs
§ La commande java permet de lancer un fichier .java sans passer
par javac (compilation)
§ La compilation se fait alors en mémoire
§ On peut même, sous unix, faire des scripts java avec l'utilisation du
shebang : #!/usr/bin/java --source 11
§ But : réduire la cérémonie du language
Java 11 : Launch Single-File Source-Code Programs
§ Source dans un seul fichier pas de dépendance avec d’autres classes
§ Si classe compilée => utilisation obligatoire : javac test.java; java
test.java
§ File name, not class name!
§ Plusieurs classes publiques

Contenu connexe

Tendances

Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
ENSET, Université Hassan II Casablanca
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
ENSET, Université Hassan II Casablanca
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
ENSET, Université Hassan II Casablanca
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
Florian Beaufumé
 
Support distributed computing and caching avec hazelcast
Support distributed computing and caching avec hazelcastSupport distributed computing and caching avec hazelcast
Support distributed computing and caching avec hazelcast
ENSET, Université Hassan II Casablanca
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
ENSET, Université Hassan II Casablanca
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
XavierPestel
 
L'API Collector dans tous ses états
L'API Collector dans tous ses étatsL'API Collector dans tous ses états
L'API Collector dans tous ses états
José Paumard
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
José Paumard
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
Franck SIMON
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
DNG Consulting
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
ENSET, Université Hassan II Casablanca
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
Ippon
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
ENSET, Université Hassan II Casablanca
 
Introduction à Node.js
Introduction à Node.js Introduction à Node.js
Introduction à Node.js
Sonam TCHEUTSEUN
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
ENSET, Université Hassan II Casablanca
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
Jean-Baptiste Vigneron
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
ENSET, Université Hassan II Casablanca
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
Ines Ouaz
 

Tendances (20)

Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Support distributed computing and caching avec hazelcast
Support distributed computing and caching avec hazelcastSupport distributed computing and caching avec hazelcast
Support distributed computing and caching avec hazelcast
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
L'API Collector dans tous ses états
L'API Collector dans tous ses étatsL'API Collector dans tous ses états
L'API Collector dans tous ses états
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Introduction à Node.js
Introduction à Node.js Introduction à Node.js
Introduction à Node.js
 
Cours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 compositeCours design pattern m youssfi partie 4 composite
Cours design pattern m youssfi partie 4 composite
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 

Similaire à Nouveautés Java 9-10-11

devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
Jean-Michel Doudoux
 
[Java] Versioning & Nouveautés JDK 12-15
[Java] Versioning & Nouveautés JDK 12-15[Java] Versioning & Nouveautés JDK 12-15
[Java] Versioning & Nouveautés JDK 12-15
Romain Schlick
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
Jérôme Tamborini
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Jean-Michel Doudoux
 
JAVA Chapitre1
JAVA Chapitre1 JAVA Chapitre1
JAVA Chapitre1
Mohamed Ferchichi
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
Mohamed Lahby
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
Mamadou Oury Ba
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
Jean-Michel Doudoux
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
Jean-Michel Doudoux
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
Jean-Michel Doudoux
 
Lyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantLyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenant
Jean-Michel Doudoux
 
Introduction Kotlin
Introduction KotlinIntroduction Kotlin
Introduction Kotlin
Romain Schlick
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
seydou4devops
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
badrfathallah2
 
Nantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantNantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenant
Jean-Michel Doudoux
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
Jean-Michel Doudoux
 
Java j2ee
Java j2eeJava j2ee
Java j2ee
izdihara
 

Similaire à Nouveautés Java 9-10-11 (20)

devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
 
[Java] Versioning & Nouveautés JDK 12-15
[Java] Versioning & Nouveautés JDK 12-15[Java] Versioning & Nouveautés JDK 12-15
[Java] Versioning & Nouveautés JDK 12-15
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
 
JAVA Chapitre1
JAVA Chapitre1 JAVA Chapitre1
JAVA Chapitre1
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
 
Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018Apres java 8, java 9 et 10 - BreizhCamp 2018
Apres java 8, java 9 et 10 - BreizhCamp 2018
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Lyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenantLyon JUG 2018 - Java le changement c'est maintenant
Lyon JUG 2018 - Java le changement c'est maintenant
 
Introduction Kotlin
Introduction KotlinIntroduction Kotlin
Introduction Kotlin
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
Gradle_ToulouseJUG
Gradle_ToulouseJUGGradle_ToulouseJUG
Gradle_ToulouseJUG
 
Nantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenantNantes jug 2018 - Java le changement c'est maintenant
Nantes jug 2018 - Java le changement c'est maintenant
 
gradle_nantesjug
gradle_nantesjuggradle_nantesjug
gradle_nantesjug
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
 
Java j2ee
Java j2eeJava j2ee
Java j2ee
 
Gradle_ToursJUG
Gradle_ToursJUGGradle_ToursJUG
Gradle_ToursJUG
 

Dernier

Meetup LFUG : Cahier de vacances Liferay
Meetup LFUG : Cahier de vacances LiferayMeetup LFUG : Cahier de vacances Liferay
Meetup LFUG : Cahier de vacances Liferay
Sébastien Le Marchand
 
Ideatech - le service de cobotique industrielle
Ideatech - le service de cobotique industrielleIdeatech - le service de cobotique industrielle
Ideatech - le service de cobotique industrielle
JPFALAVEL.PRO
 
procede de fabrication mecanique et industriel
procede de fabrication mecanique et industrielprocede de fabrication mecanique et industriel
procede de fabrication mecanique et industriel
saadbellaari
 
Rapport de fin de formation/fin d'etudes, technicien specialise
Rapport de fin de formation/fin d'etudes, technicien specialiseRapport de fin de formation/fin d'etudes, technicien specialise
Rapport de fin de formation/fin d'etudes, technicien specialise
GammingWorld2
 
Introduction à Crossplane (Talk Devoxx 2023)
Introduction à Crossplane (Talk Devoxx 2023)Introduction à Crossplane (Talk Devoxx 2023)
Introduction à Crossplane (Talk Devoxx 2023)
Adrien Blind
 
Vision de Claude 3.5 SONNET Comment utiliser la vision Utilisez les capacités...
Vision de Claude 3.5 SONNET Comment utiliser la vision Utilisez les capacités...Vision de Claude 3.5 SONNET Comment utiliser la vision Utilisez les capacités...
Vision de Claude 3.5 SONNET Comment utiliser la vision Utilisez les capacités...
Erol GIRAUDY
 
Cours d'Intelligence Artificielle et Apprentissage Automatique.pptx
Cours d'Intelligence Artificielle et Apprentissage Automatique.pptxCours d'Intelligence Artificielle et Apprentissage Automatique.pptx
Cours d'Intelligence Artificielle et Apprentissage Automatique.pptx
Jacques KIZA DIMANDJA
 
Be Juicy - Monétiser les contenus des créateurs
Be Juicy - Monétiser les contenus des créateursBe Juicy - Monétiser les contenus des créateurs
Be Juicy - Monétiser les contenus des créateurs
JPFALAVEL.PRO
 
Inokey - plateforme web pour vos clefs de voiture
Inokey - plateforme web pour vos clefs de voitureInokey - plateforme web pour vos clefs de voiture
Inokey - plateforme web pour vos clefs de voiture
JPFALAVEL.PRO
 
Hotel 2 for 1 - plateforme de réservation hôtelière
Hotel 2 for 1 - plateforme de réservation hôtelièreHotel 2 for 1 - plateforme de réservation hôtelière
Hotel 2 for 1 - plateforme de réservation hôtelière
JPFALAVEL.PRO
 
Tutoriel interactif d’ingénierie rapide d’Anthropic.pdf
Tutoriel interactif d’ingénierie rapide d’Anthropic.pdfTutoriel interactif d’ingénierie rapide d’Anthropic.pdf
Tutoriel interactif d’ingénierie rapide d’Anthropic.pdf
Erol GIRAUDY
 
Agilité : passé, présent et futur Agi'Lille 2024
Agilité : passé, présent et futur Agi'Lille 2024Agilité : passé, présent et futur Agi'Lille 2024
Agilité : passé, présent et futur Agi'Lille 2024
Benjamin Cabanne
 
CLAUDE 3.5 SONNET EXPLICATIONS sur les usages
CLAUDE 3.5 SONNET EXPLICATIONS sur les usagesCLAUDE 3.5 SONNET EXPLICATIONS sur les usages
CLAUDE 3.5 SONNET EXPLICATIONS sur les usages
Erol GIRAUDY
 

Dernier (13)

Meetup LFUG : Cahier de vacances Liferay
Meetup LFUG : Cahier de vacances LiferayMeetup LFUG : Cahier de vacances Liferay
Meetup LFUG : Cahier de vacances Liferay
 
Ideatech - le service de cobotique industrielle
Ideatech - le service de cobotique industrielleIdeatech - le service de cobotique industrielle
Ideatech - le service de cobotique industrielle
 
procede de fabrication mecanique et industriel
procede de fabrication mecanique et industrielprocede de fabrication mecanique et industriel
procede de fabrication mecanique et industriel
 
Rapport de fin de formation/fin d'etudes, technicien specialise
Rapport de fin de formation/fin d'etudes, technicien specialiseRapport de fin de formation/fin d'etudes, technicien specialise
Rapport de fin de formation/fin d'etudes, technicien specialise
 
Introduction à Crossplane (Talk Devoxx 2023)
Introduction à Crossplane (Talk Devoxx 2023)Introduction à Crossplane (Talk Devoxx 2023)
Introduction à Crossplane (Talk Devoxx 2023)
 
Vision de Claude 3.5 SONNET Comment utiliser la vision Utilisez les capacités...
Vision de Claude 3.5 SONNET Comment utiliser la vision Utilisez les capacités...Vision de Claude 3.5 SONNET Comment utiliser la vision Utilisez les capacités...
Vision de Claude 3.5 SONNET Comment utiliser la vision Utilisez les capacités...
 
Cours d'Intelligence Artificielle et Apprentissage Automatique.pptx
Cours d'Intelligence Artificielle et Apprentissage Automatique.pptxCours d'Intelligence Artificielle et Apprentissage Automatique.pptx
Cours d'Intelligence Artificielle et Apprentissage Automatique.pptx
 
Be Juicy - Monétiser les contenus des créateurs
Be Juicy - Monétiser les contenus des créateursBe Juicy - Monétiser les contenus des créateurs
Be Juicy - Monétiser les contenus des créateurs
 
Inokey - plateforme web pour vos clefs de voiture
Inokey - plateforme web pour vos clefs de voitureInokey - plateforme web pour vos clefs de voiture
Inokey - plateforme web pour vos clefs de voiture
 
Hotel 2 for 1 - plateforme de réservation hôtelière
Hotel 2 for 1 - plateforme de réservation hôtelièreHotel 2 for 1 - plateforme de réservation hôtelière
Hotel 2 for 1 - plateforme de réservation hôtelière
 
Tutoriel interactif d’ingénierie rapide d’Anthropic.pdf
Tutoriel interactif d’ingénierie rapide d’Anthropic.pdfTutoriel interactif d’ingénierie rapide d’Anthropic.pdf
Tutoriel interactif d’ingénierie rapide d’Anthropic.pdf
 
Agilité : passé, présent et futur Agi'Lille 2024
Agilité : passé, présent et futur Agi'Lille 2024Agilité : passé, présent et futur Agi'Lille 2024
Agilité : passé, présent et futur Agi'Lille 2024
 
CLAUDE 3.5 SONNET EXPLICATIONS sur les usages
CLAUDE 3.5 SONNET EXPLICATIONS sur les usagesCLAUDE 3.5 SONNET EXPLICATIONS sur les usages
CLAUDE 3.5 SONNET EXPLICATIONS sur les usages
 

Nouveautés Java 9-10-11

  • 1. Nouveautés Java 9 & un aperçu Java 10 et 11
  • 2. JDK : release § Jusqu'à Java 9 : § fonctionnement en features release : § Une liste de fonctionnalités été définie pour une release § La date de release été planifiée : généralement une toute les 2 ans § Dès qu'une fonctionnalités prenait plus de temps : la release est décalée § Conséquence : § Des releases de tailles importantes difficile à sortir § Des releases de 3 ans plutôt que 2 : 3,5 ans entre Java 8 et 9 ! § Compliqué à prendre en main par les développeurs
  • 3. JDK : release § Depuis Java 10 : § Dès qu'une fonctionnalité est prête on l'intègre dans la future release § On release à date ce qui est intégré. § Conséquence : § Des releases tous les 6 mois § Des releases plus petites et donc faciles à livrer et à intégrer pour les développeurs § Un développement plus facile et rapide de fonctionnalités dans Java
  • 4. JDK : Support § Depuis Java 10 on a donc une release tous les 6 mois. § Toutes les 6 releases => une release Long Term Support -- LTS. § La politique de support gratuit a changé : § Une release non-LTS est supportée 6 mois § Une release TS est supportée au minimum 3 ans § Java 8 sera EOL en 2019 § Oracle fournit du support étendu payant § Pas de panique, d'autres vont proposer du support étendu gratuit :)
  • 5. JDK : Distribution § OpenJDK est le projet open source d'implémentation du langage Java et de la JVM. § Beaucoup d'organisations participent à ce projet. § Oracle est une de ces organisations (la principale). § Depuis Java 11, Oracle fournit deux distributions d'OpenJDK qui sont identiques en terme de fonctionnalités : § OpenJDK : support limité dans le temps § OracleJDK : support étendu payant
  • 6. JDK : Distribution § Il existe beaucoup d'autres distributions de Java, dont certaines proposent déjà un support plus étendu qu'OpenJDK : § Azul : Zing (payant) et Zulu (gratuit) § AdoptOpenJDK § RedHat § Eclipse via OpenJ9 (implémentation IBM) § Amazon Corretto § Certaines de ces distributions ont un support (et donc des mise à jour) gratuit sur une période plus grande qu'OpenJDK.
  • 7. Java 9 : Modules C’est quoi un Module : § A Module is a self-describing collection of Code, Data and some Resources. § It is a set of related Packages, Types (classes, abstract classes, interfaces etc) with Code & Data and Resources. § Each Module contains only a set of related code and data to support Single Responsibility (Functionality) Principle (SRP).
  • 8. Java 9 : Modules
  • 10. Pourquoi les Modules § Chargement de classe à la demande : new § Chargement linaire de classes : la classloader charge les classes linéairement et s’arrête à la première classe correspondant au nom complet demandé. § Duplication de classes : pas de vérification à l’exécution sur l’existence de plusieurs occurrences d’une même classe. § Vérification de présence dépendances de tous les jars / classes nécessaires au bon fonctionnement de l’application. § Le classpath est plat sans aucune notion de dépendances entre les jars.
  • 11. Pourquoi les Modules § L’ordre des jars dans le classpath est important.
  • 12. Pourquoi les modules : programmation par module
  • 13. Pourquoi les Modules : Sécuriser la visibilité
  • 14. Pourquoi les Modules : réflexivité
  • 16. Modules providers : ServiceLoader § Un mécanisme intégré simple et facile à utiliser pour le chargement dynamique des implémentations d'interface § De nombreuses API Java sont implémentées sur la base du ServiceLoader
  • 17. Modules providers : ServiceLoader
  • 18. Automatic Module : Anciens Jars Limitations: If jar name contains – or . characters at that time module-info.java does not allowed module name with – or . i.e: require gauva-11.5 gauva-11.5 is invalid. In this case rename jar file and remove – or . characters from jar file.
  • 19. Java 9 jshell: The Java Shell (Read-Eval-Print Loop) § Beaucoup de langages (ruby, scala, python, …) proposent une Read- Evaluate-Print-Loop (REPL), un shell. § Permet un apprentissage aisé du langage § Eviter le cérémonial d’édition, de compilation, de packaging du code. § Avec Java 9, apparait jshell, le REPL de java !
  • 20. Java 9 : Jshell
  • 21. Java 9 : Underscore (“_”)
  • 22. Java 9 : Factory Methods Collections § L'un des plus grand changement en terme d’API : des méthodes statiques pour la création de collection immuable. § Cible : création de petite collections (list, set, map). § La performance et l’utilisation mémoire ont été au centre de l’implémentation de ces collections.
  • 23. Java 9 : List, Set, Map of § Ces méthodes retournent une List, un Set ou une Map immuables Jdk8 Jdk9
  • 24. Java 9 : List, Set, Map of
  • 25. Java 9 : Nouvelles méthodes § Classe Stream : takeWhile, dropWhile, ofNullable et iterate. § Classe Optional : ifPresent, ifPresentOrElse, or et stream.. § Arrays : Beaucoup de nouvelles méthodes permettant de comparer des tableaux : § Arrays.equals() § Arrays.compare() § Arrays.compareUnsigned() § Arrays.mismatch()
  • 26. Java 9 : Performance compact Strings § Avant Java 9 : String étaient stockées en UTF-16, chaque caractère prenait donc deux octets car stockés dans un tableau de char. § Avec Java 9 : Revue de l’implémentation des String en Java pour en proposer une version plus compact en cas de String compatible ISO- 8859-1 (ou Latin-1). § UTF-16 : chaque caractère est stocké sur deux octets. § ISO-8859-1 chaque caractère est stocké sur un octets.
  • 27. Java 9 : Performance Indify String Concatenation § Avant Java 6 => entraîne la création de 6 String car les String sont immuable : s, « toto », « tata », « titi », »tototata », « tototatatiti », « tototatatititutu » … pour finir par ne garder que s et donc les autres objets seront nettoyés par GC (la Garbage Collector). § Depuis Java 6 : le compilateur Java (javac) essaye d’optimiser, en remplaçant, lors de la compilation, les concaténations par l’usage de StringBuilder. Il remplace donc le code précédent par : § Avec Java 9 : utilisation du bytecode InvodeDynamic lors de la concaténation de String et l’implémentation au runtime d’une stratégie de concaténation optimisée directement au sein de la JVM.
  • 28. Java 9 : Enhanced Deprecation § Ajout de deux attributs à l'annotation @Deprecated : § since : depuis quelle version l'API est dépréciée. § forRemoval : mettre à true (par défaut false) si l'API sera supprimée dans une future release. § Le but est de faciliter le cycle de vie des applications et de permettre, peut-être plus sereinement, de supprimer dans le futur certaines API du JDK lui-même.
  • 29. Java 9 : interface avec Méthode privée § Avec Java 8 : § Constant variables § Abstract methods § Default methods § Static methods § Avec Java 9 : Méthode privée dans les interfaces : permet la factorisation de code de méthode statique dans une même interface. § Private methods § Private Static methods
  • 30. Java 9 : Objects § Objects.requireNonNullElse(T obj, T defaultObj) : retourne le premier éléments si non null, sinon le deuxième. Si les deux sont null : NullPointerException § Objects.requireNonNullElseGet(T obj, Supplier supplier) : retourne le premier éléments si non null, sinon appel le supplier.get(). § int Objects.checkIndex(int index, int length) : check de l’index : génère un IndexOutOfBoundsException si l’index est inférieur à 0 ou supérieur ou éagle à la taille. Cette méthode peut-être optimisée par le JVM. § int Objects.checkFromToIndex(int fromIndex, int toIndex, int length) : idem mais pour le sous-range fromIndex/toIndex § int Objects.checkFromIndexSize(int fromIndex, int size, int length) : idem mais pour le sous-range fromIndex/fromIndex + size
  • 31. Java 9 : Javadoc Remise en forme légère au niveau graphique de la javadoc : § Passage à HTML5, § Support des commentaires javadoc dans les déclarations de modules § Ajout d'une zone de recherche.
  • 32. Java 9 : HTTP/2 Client (Incubator) § Une nouvelle API a été créée pour proposer une implémentation plus simple à utiliser que la très ancienne HttpURLConnection § Nouveau client HTTP au goût du jour, synchrone ou asynchrone (alors basé sur les CompletableFuture).
  • 33. Java 9 : HTTP/2 Client (Incubator)
  • 34. Java 9 : Stack-Walking API • En Java 8 et versions antérieures, la méthode getStackTrace de la classe Thread permettait déjà d’obtenir la stack trace ..: mais n’offrait pas la même richesse de filtres, d’assertion et de récupération (stack trace courte ou complète). • Nouvelle API : • pour récupérer la stack trace du thread courant, • de naviguer et d’interagir avec ses éléments. • de filtrer les classes en supprimant par exemple toutes les mentions de framework/proxies pour ne conserver que les classes métiers de l’application.
  • 35. Java 9 : Stack-Walking API
  • 36. Java 9 : Process API Updates
  • 37. Java 9 : Process API Updates
  • 38. Java 9 : Reactive Stream avec Flow API
  • 39. Java 9 : Reactive Stream avec Flow API Publisher<T> : § Représente l’entité émettrice (émetteur) du flux d’événements/données. § Le type générique T représente le type de la donnée qui sera émise (Integer,String, Objet ou autre classe). § La méthode déclarée subscribe permet d’abonner une ou plusieurs entités réceptrice (subsrciber)
  • 40. Java 9 : Reactive Stream avec Flow API Subsriber<T> : § Représente l’entité réceptrice (abonné) du flux d’événements/données. § Le type générique T représente le type de la donnée qui sera réceptionnée. Donc pour qu’un abonné soit rattaché à un émetteur il faut qu’il ait le même type générique T. § Les méthodes de cette interface permettent de § onSubscribe : définir une action à entreprendre avant l’appel de n’importe quelle méthode de cet abonné et ce pour l’abonnement subscription passé en paramètre. § onNext : définir une action à entreprendre dans cet abonné lorsqu’une émission a lieu. § onError : définir une action à entreprendre dans cet abonné lorsqu’une erreur a lieu lors de l’émission. § onComplete : définir une action à entreprendre lorsque l’émetteur termine l’émission de toutes les données du flux.
  • 41. Java 9 : Reactive Stream avec Flow API Processor<I,O> : § Permet de transformer les données entre Publisher et Subsriber.
  • 42. Java 10 : Inférence de type variables locales § C’est LA grande nouveauté de Java 10 : la possibilité d’utiliser le mot clé var à la place d’une déclaration standard de variable, à l’intérieur d’une méthode (variable locale) quand le type peut être inféré par le compilateur. § En attendant :
  • 43. Java 10 : Inférence de type variables locales Restrictions : § Une variable doit être initialisée avec valeur non null : var x; //No!!!, var x = null; //No! § var x=0,y=0; // no! § Modification de type : var x=0; //Inferred to be of type 'int' var x="c"; //No! - incompatible types!
  • 44. Java 10 : Nouvelles méthodes § Optional : orElseThrow() alternative get() § List, Set et Map : copyOf, copie immuable § Collectors Stream : création de collection immuable § Collectors.toUnmodifiableList(), § Collectors.toUnmodifiableSet(), § Collectors.toUnmodifiableMap(keyFunc, valueFunc), § Collectors.toUnmodifiableMap(keyFunc, valueFunc, mergeFunc).
  • 45. Java 10: Reader.transferTo(Writer) § Un nouvelle méthode à la classe Reader de directement transférer tout les caractère d’un Reader à un Writer :
  • 46. Java 10 : Performance Parallel Full GC for G1 § G1 est depuis Java 9 l’algorithme de Garbage Collection par défaut. Hors dans celui-ci, quand le collector n’arrive plus à nettoyer assez rapidement la heap de manière concurrente, il déclenche un Full GC qui était mono-threadé. § Depuis Java 10 l’implémentation de celui-ci a été changée en multi- threadé, le nombre de threads étant définit par -XX:ParallelGCThreads
  • 47. Java 11 § Première version LTS (Long Term Support) de 3 ans => prochaine LTS Java 17 § Support Java 8 jusqu’en 2019 (commerciale), 2020 (personnelle) => sinon (25$/mois/cpu core) § Plus de support Java 10
  • 48. Java 11 : Local-Variable Syntax for Lambda Parameters § Permet l’utilisation du mot clé var les signatures des lambdas. § But : permettre d'ajouter des modificateurs (ex: annotations) sans nécessité de mettre le type.
  • 49. Java 11 : nouvelles méthodes String : § repeat(int) - Repeats the String as many times as provided by the int parameter § lines() - Uses a Spliterator to lazily provide lines from the source string § isBlank() - Indicates if the String is empty or contains only white space characters § stripLeading() - Removes the white space from the beginning § stripTrailing() - Removes the white space from the end § strip() - Removes the white space from both, beginning and the end of string File : § writeString(): This is to write some content in a file. § readString(): This is used to read the contents of a file. § isSameFile(): This method is used to know whether two paths locate the same file or not. TimeUnit Conversion : This method is used to convert the given time to a unit like DAY, MONTH, YEAR and for time too.
  • 50. Java 11 : nouvelles méthodes TimeUnit Conversion : This method is used to convert the given time to a unit like DAY, MONTH, YEAR and for time too. § Optional: isEmpty() This method returns true if the value of any object is null and else returns false. § Predicate.not: négation d’un prédicat. § Affichage de la taille du tableau dans le message de l’exception ArrayIndexOutOfBoundsException.
  • 51. Java 11 : Launch Single-File Source-Code Programs § La commande java permet de lancer un fichier .java sans passer par javac (compilation) § La compilation se fait alors en mémoire § On peut même, sous unix, faire des scripts java avec l'utilisation du shebang : #!/usr/bin/java --source 11 § But : réduire la cérémonie du language
  • 52. Java 11 : Launch Single-File Source-Code Programs § Source dans un seul fichier pas de dépendance avec d’autres classes § Si classe compilée => utilisation obligatoire : javac test.java; java test.java § File name, not class name! § Plusieurs classes publiques