|
|
La suite aborde le langage Java sous l'angle de la compilation et de l'exécution des programmes.
|
|
|
|
|
|
- [Java en bref, éditions / distributions](#java-en-bref---ditions---distributions)
|
|
|
- [Installation du JDK](#installation-du-jdk)
|
|
|
- [Compilation et exécution d'une application Java](#compilation-et-ex-cution-d-une-application-java)
|
|
|
- [:rocket: Pour aller plus loin ...](#-rocket--pour-aller-plus-loin-)
|
|
|
* [Compilation et exécution : Java _vs_ C](#compilation-et-ex-cution---java--vs--c)
|
|
|
+ [Programme écrit en langage C](#programme--crit-en-langage-c)
|
|
|
+ [Programme écrit en langage Java](#programme--crit-en-langage-java)
|
|
|
* [Bytecode Java](#bytecode-java)
|
|
|
* [Modèle de licence Java SE, versions LTS / non-LTS, distributions](#mod-le-de-licence-java-se--versions-lts---non-lts--distributions)
|
|
|
* [Popularité et usages de Java](#popularit--et-usages-de-java)
|
|
|
# Table des matières
|
|
|
|
|
|
<small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table of contents generated with markdown-toc</a></i></small>
|
|
|
<!-- TOC start (generated with https://github.com/derlin/bitdowntoc) -->
|
|
|
|
|
|
- [Java en bref, éditions / distributions](#java-en-bref-éditions-distributions)
|
|
|
- [Installation du JDK](#installation-du-jdk)
|
|
|
- [Compilation et exécution d'une application Java](#compilation-et-exécution-dune-application-java)
|
|
|
- [:rocket: Pour aller plus loin ... ](#rocket-pour-aller-plus-loin-)
|
|
|
* [Compilation et exécution : Java _vs_ C](#compilation-et-exécution-java-vs-c)
|
|
|
+ [Programme écrit en langage C](#programme-écrit-en-langage-c)
|
|
|
+ [Programme écrit en langage Java](#programme-écrit-en-langage-java)
|
|
|
* [Bytecode Java](#bytecode-java)
|
|
|
* [Modèle de licence Java SE, versions LTS / non-LTS, distributions](#modèle-de-licence-java-se-versions-lts-non-lts-distributions)
|
|
|
* [Popularité et usages de Java](#popularité-et-usages-de-java)
|
|
|
|
|
|
<!-- TOC end -->
|
|
|
|
|
|
<!-- TOC --><a name="java-en-bref-éditions-distributions"></a>
|
|
|
# Java en bref, éditions / distributions
|
|
|
|
|
|
**Java** est un langage de programmation dont la syntaxe possède de nombreuses similarités avec à celle du langage C (voir plus bas l'exemple `HelloWorld`). C'est néanmoins un langage orienté objet, en ce sens il est plus proche de C++.
|
... | ... | @@ -39,6 +44,7 @@ On distingue dans Java SE : |
|
|
|
|
|
> :rocket: Pour en savoir plus, voir `Modèle de licence Java SE, versions LTS / non-LTS, distributions` dans la section `Pour aller plus loin`
|
|
|
|
|
|
<!-- TOC --><a name="installation-du-jdk"></a>
|
|
|
# Installation du JDK
|
|
|
|
|
|
Il existe une variété de **distributions** fournies par des éditeurs de logiciels ou des communautés de développeurs, parmis lesquelles :
|
... | ... | @@ -61,6 +67,7 @@ OpenJDK 64-Bit Server VM Temurin-21.0.1+12 (build 21.0.1+12-LTS, mixed mode) |
|
|
sebastienjean@Air-SebJ ~ %
|
|
|
```
|
|
|
|
|
|
<!-- TOC --><a name="compilation-et-exécution-dune-application-java"></a>
|
|
|
# Compilation et exécution d'une application Java
|
|
|
|
|
|
Les applications Java sont structurés en **classes**.
|
... | ... | @@ -147,14 +154,17 @@ Les arguments de la ligne de commande sont des chaines de caractères séparées |
|
|
* `java HelloWorld "Hello, World" another` exécute l'application en lui passant 2 arguments (`Hello, World` et `another`)
|
|
|
* `java HelloWorld Hello, World another` exécute l'application en lui passant 3 arguments (`Hello,`<sub> ,</sub> `World` et `another`)
|
|
|
|
|
|
<!-- TOC --><a name="rocket-pour-aller-plus-loin-"></a>
|
|
|
# :rocket: Pour aller plus loin ...
|
|
|
|
|
|
La suite contient des compléments, non indispensables immédiatement, pour les curieux avides de détails.
|
|
|
|
|
|
<!-- TOC --><a name="compilation-et-exécution-java-vs-c"></a>
|
|
|
## Compilation et exécution : Java _vs_ C
|
|
|
|
|
|
La suite compare les processus de compilation et d'exécution des programmes écrits en Java et C.
|
|
|
|
|
|
<!-- TOC --><a name="programme-écrit-en-langage-c"></a>
|
|
|
### Programme écrit en langage C
|
|
|
|
|
|
Dans un langage procédural et compilé tel que C, le cycle de production de l'exécutable à partir des sources suit un ensemble d'étapes présentées de manière simplifiée sur le schéma.
|
... | ... | @@ -176,6 +186,7 @@ Le langage C est standardisé, sa libraire standard aussi, et un programme n'all |
|
|
|
|
|
> L'avantage des langages compilés classiques tels que C est qu'ils produisent un exécutable au plus près du matériel et du système, sans rajouter de surcouche inutile. Ils sont donc extrêmement compacts (et leur taille indique quasiment la place que leur code va réellement occuper en mémoire) et extrêmement performants.
|
|
|
|
|
|
<!-- TOC --><a name="programme-écrit-en-langage-java"></a>
|
|
|
### Programme écrit en langage Java
|
|
|
|
|
|
Java opte pour une vision intermédiaire, illustrée ci-dessous, en étant compilé vers un langage intermédiaire interprété ou recompilé à la volée sur chaque cible matériel/système.
|
... | ... | @@ -192,6 +203,7 @@ Java opte pour une vision intermédiaire, illustrée ci-dessous, en étant compi |
|
|
|
|
|
> Ainsi, en écrivant le code source une seule fois et en produisant le binaire une seule fois, ce binaire pourra être exécuté sans autre intervention sur toutes les cibles matériel/système disposant d'une JVM, avec des performances relativement équivalentes (la différence n'est pas très significative, en réalité c'est surtout le coût de démarrage de l'application qui est pénalisant. Ce coût devient négligeable quand l'exécution de l'application se fait sur un temps long).
|
|
|
|
|
|
<!-- TOC --><a name="bytecode-java"></a>
|
|
|
## Bytecode Java
|
|
|
|
|
|
Un fichier `.class`n'est pas lisible tel quel, c'est un format binaire et non texte, mais il est possible avec l'outil `javap` de décompiler / désassembler le bytecode pour avoir une idée de ce à quoi ressemble le langage natif de la machine virtuelle Java :
|
... | ... | @@ -218,6 +230,7 @@ sebastienjean@Air-SebJ % |
|
|
|
|
|
On voit qu'il est proche d'un langage d'assemblage, certaines instructions ressemblent à des chargements de valeurs dans des registres, à des sauts, ...
|
|
|
|
|
|
<!-- TOC --><a name="modèle-de-licence-java-se-versions-lts-non-lts-distributions"></a>
|
|
|
## Modèle de licence Java SE, versions LTS / non-LTS, distributions
|
|
|
|
|
|
Même si il est la propriété d'Oracle, **Java SE est utilisable gratuitement sans conditions**.
|
... | ... | @@ -230,6 +243,7 @@ Les distributions Java correspondent à des versions **précompilées et _packag |
|
|
|
|
|
Techniquement il n'existe pas de différence notable entre les distributions Java mais certaines disposent d'outils supplémentaires, ont des performances plus élevées sur certains aspects, ... Certaines sont libres (leur code est ouvert), d'autres non (par exemple Oracle JDK n'est pas libre, Oracle OpenJDK oui).
|
|
|
|
|
|
<!-- TOC --><a name="popularité-et-usages-de-java"></a>
|
|
|
## Popularité et usages de Java
|
|
|
|
|
|
L'[index Tiobe](https://www.tiobe.com/tiobe-index/) permet de mesurer la part des langages dans les développements. Java figure depuis 20 ans parmi les 3 ou 4 langages majeurs qui représentent à eux seuls plus de 50% des développements.
|
... | ... | |