Les bases du langage #
Introduction à Java #
Java est un langage populaire et très utilisé dans le domaine industriel. Il est un langage de choix dans le domaine académique pour comprendre le paradigme objet. Il bénéficie d’un large écosystème et d’une grande communauté fournissant un panel d’outils libres et gratuits. Il a l’avantage d’être portable : le langage Java est compilé en un code intermédiaire, appelé byte code, qui est indépendant de l’architecture et qui peut être interprété sur n’importe quelle machine possédant une machine virtuelle java . C’est cette dernière qui est dépendante de l’architecture et qui doit permettre d’interpréter le bytecode en un code machine. Le slogan de Java est code once, run everywhere.
Le langage se veut simple : Il n’a pas de pointeurs et gère automatiquement la libération de la mémoire, permettant ainsi de réduire considérablement le nombre de bugs. Il utilise un mécanisme de ramasse-miettes pour gérer cette libération de la mémoire pour nous.
Le langage possède un typage statique. Cette caractéristique offre un système de type robuste qui vérifie le contrôle des types à la compilation, ce qui offre également l’avantage de réduire le nombre de bugs.
Hello World #
Voici le traditionnel ‘Hello World’ de Java :
|
|
Le fichier doit s’appeler HelloWorld.java
. Pour le compiler et l’exécuter, lancez les commandes suivantes:
|
|
Les fonctionnalités du mode Preview de Java 15 que nous aborderons dans certains chapitres nécessite des options de compilation et d’exécution:
|
|
L’image ci-dessous illustre les étapes de compilation et d’exécution en spécifiant les parties indépendantes ou dépendantes de l’architecture.
Bien que le bytecode Java soit interprété par une machine virtuelle, le langage Java est quant à lui compilé. Une interprétation transforme le code ligne par ligne en un code machine, ce qui implique généralement une exécution plus lente qu’un code compilé directement en langage machine.
Pour palier aux problèmes de performances, JRE inclu un module Just-In-Time, appelé communément JIT, qui transforme lors de l’exécution le bytecode fréquemment utilisé en code machine. Ce bytecode ne sera donc plus interprété.
Depuis peu, un compilateur Ahead-Of-Time, appelé communément (AOT) permet de compiler du bytecode en code machine avant son exécution. Le bytecode n’est donc plus interprété et c’est bien du code machine qui est exécuté. Les version récente de Java propose l’AOT via la commande jaotc
. Le projet Graal VM
permet également l’AOT.
Ces deux techniques (JIT et AOT) améliore grandement les performances du langage.
L’image ci-dessous illustre l’écosystème Java. Le JDK englobe les outils de développement tels que le compilateur, les API de bases ainsi qu’une JVM.
Impératif vs déclaratif #
Java est un langage impératif et orienté objet (non pur, car il existe des types primitifs). Il évolue depuis sa version 7 vers un style plus déclaratif.
Pour comprendre, comparons un algorithme qui compte la somme des éléments positifs d’une liste:
Style impératif en pseudo-java #
Le style impératif nécessite de décrire les étapes pour obtenir un objectif.
|
|
Style déclaratif en pseudo-java #
Un style déclaratif offre l’avantage de décrire le résultat d’un algorithme sans décrire les étapes de réalisations.
|
|
Ce style se concentre sur la description du “quoi” plutôt que du “comment”. Le langage SQL est un exemple de langage déclaratif.
Nous convergerons rapidement vers ce style de programmation contemporaine. Les avantages sont nombreux :
- code moins sujet aux erreurs
- facile à comprendre l’intention
- code court et concis
- composition de fonctionnalités plus simple
Documentation #
Apprenez à utiliser la documentation officielle. Utilisez au minimum la version 11 de la javadoc d’Oracle: