![[baldir_loupe.jpg|320x223]]
## Java dans les grandes lignes
Langage de programmation **[[Glossaire - Programmation#Couche d’abstraction|haut niveau]]**, **[[Glossaire - Programmation#Paradigme de programmation orientée objet|orienté objet]]** **[[Glossaire - Programmation#Typage fort|fortement typé]]**, basé sur les [[Glossaire - Programmation#Classe|classes]], créé en 1995
Version actuelle [[Glossaire - Programmation#Long Term Support|LTS]] : **Java 25**
![[Duke.gif|200x150]]
Duke - mascotte de [[Glossaire - Programmation#Java|Java]]
## Caractéristiques
**Simplicité** (pas de notion de pointeur, pas d'héritage multiple, pas de surcharge d'opérateurs)
**Mémoiré gérée** automatiquement par un "Ramasse-miettes" ([[Glossaire - Programmation#Garbage collector|garbage collector]])
**[[Glossaire - Programmation#Langage compilé|Compilé]] puis [[Glossaire - Programmation#Langage interprété|Interprété]]** Code java **compilé** en [[Glossaire - Programmation#Bytecode|bytecode]]. Le bytecode est ensuite **interprété** par la [[Glossaire - Programmation#JVM|JVM]]
**Économe** ([[Glossaire - Programmation#Bibliothèque|bibliothèques]] de classes liées à l'exécution)
**[[Glossaire - Programmation#Portabilité|Portable]]** (indépendant de plateforme)
**Multitâches** ([[Glossaire - Programmation#Multi-threading|Multi-threadée]] et [[Glossaire - Programmation#Programmation concurrente|programmation concurrente]])
**Scalabilité :** multi-threading, capable d'ingérer de grande quantités de données de sources multiples, **optimisation lors de l'exécution**
**Sécurité intégrée** (vérification de [[Glossaire - Programmation#Bytecode|byte code]], signature de [[Glossaire - Programmation#Jar|Jar]], algorithmes de chiffrement et cryptographie)
<div style="page-break-after: always;"></div>
## Philosophie
> _« Write once, run anywhere »_
![[David_goodenough.png|240x157]]
### The good parts
**Stabilité :** culture de la [[Glossaire - Programmation#Rétro-compatibilité|rétro-compatibilité]]
**Outillage** créé par la communauté **fortement intégré** au langage (si l'outil n'existe pas on n'hésitera pas à le créer sans attendre que l'écosystème évolue) : beaucoup de vendeurs de tierces parties
**[[Glossaire - Programmation#Open-source|Open-source]]** : [[Glossaire - Programmation#Dépendance|dépendances]], outillage et depuis quelques années, le langage est open-source
### Le revers de la médaille
Documentation extrêmement **fragmentée**, difficile d'accès aux débutant-es
Un côté un peu "administratif" et [[Glossaire - Programmation#Verbosité|verbeux]]
Une culture souvent "corporate" voire austère, parfois résistante au changement
> [!warning] Opinion
> Opinion subjective de l'enseignant après quelques années à programmer en Java dans quelques entreprises
<div style="page-break-after: always;"></div>
## Processus de spécification et standardisation
[openjdk.org](https://openjdk.org/)
- [[Glossaire - Programmation#JCP - Java Community Process Program|JCP]] : Java Community Process Program
- [[Glossaire - Programmation#JEP - JDK Enhancement Proposals|JEP]] : JDK Enhancement Proposals
- [[Glossaire - Programmation#JSR - Java Specification Requests|JSR]] : Java Specification Requests
- [[Glossaire - Programmation#JCK - Java Compatibility Kit|JCK]] : Java Compatibility Kit
### JCP : Java Community Process Program
Java Community Process Program : [jcp.org/en/home/index](https://jcp.org/en/home/index)
Le comité de spécification du langage et de la JVM
- Contributions open-sources acceptées
- Surtout des grands acteurs de la tech
- Gouvernance partagée
- Rythme de versions : tous les 6 mois
### JEP : JDK Enhancement Proposals
Proposition informelle d'amélioration du [[Glossaire - Programmation#JDK|JDK]] ou OpenJDK, invitation à l'expérimentation.
Pas encore mature pour devenir une spécification.
[openjdk.org/jeps](https://openjdk.org/jeps/0)
### JSR : Java Specification Requests
Prend une idée mature (souvent venant d'une JEP) et tente d'en faire une spécification formelle (toutes les JSR ne vont pas jusqu'au bout)
Une JSR finalisée aboutit à une **[[Glossaire - Programmation#Implémentation|implémentation]] de référence** dans OpenJDK
### JCK : Java Compatibility Kit
Tests automatisés de compatibilité de JDK destiné aux implémenteurs de JDK. tierces parties
## Historique des versions
Depuis java 9, une nouvelle version de Java est publiée **tous les 6 mois**.
![[java_historique_versions.webp|540x261]]
Source : https://dev.java/evolution/#accelerating-innovation
Voir : [[Un historique des versions Java]]
<div style="page-break-after: always;"></div>
## Écosystème JVM : pas seulement Java
![[Ecosysteme_jvm.webp]]
<div style="page-break-after: always;"></div>
### Diversité d'usages
![[j01-java - Java _ Diversité d'usages.webp]]
<div style="page-break-after: always;"></div>
### Plateforme java : Editions
| **Nom** | **Utilisation** |
| ------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| J2SE (Standard Edition) | Pour les applications de bureau, les scripts en ligne de commande, ou applications généralistes |
| Jakarta EE anciennement J2EE (Enterprise Edition) | Extensions pour les applications Web et entreprise |
| Java ME / Java SE Embedded | Pour les logiciels embarqués |
| Android SDK | Développement Mobile |
> [!note] Il est possible de composer
> On peut piocher dans des parties de ces éditions pour ne prendre que ce qui nous interesse.
>
> On peut par exemple utiliser **Jackson** provenant de jakarta EE pour simplifier l’accès aux base de données, la lecture de fichiers json ou encore **CDI**, des mécanismes d’injection de dépendances. Sans utiliser tout le reste.
<div style="page-break-after: always;"></div>
### JVM : Java Virtual Machine
![[j01-java - JVM _ Java Virtual Machine.webp]]
Après avoir [[Glossaire - Programmation#Compilation|compilé]] du code Java dans un format intermédiaire (le "[[Glossaire - Programmation#Bytecode|bytecode]]"), la machine virtuelle Java ([[Glossaire - Programmation#JVM|JVM]]) permet d'exécuter ce même bytecode sur différentes plateformes (ex. Windows, Mac, Linux).
<div style="page-break-after: always;"></div>
### Plateforme java : JDK
- **[[Glossaire - Programmation#JDK|JDK]]** : Pour développer en Java
- **[[Glossaire - Programmation#JRE|JRE]]** : Pour exécuter un programme Java
![[Pasted image 20260210120146.webp]]
<div style="page-break-after: always;"></div>
### Outillage de base
**Java [[Glossaire - Programmation#SDK|SDK]]/JDK**
Peut être téléchargé :
- via [Sdkman](https://sdkman.io/)
- Depuis le site Adoptium : https://adoptium.net/fr
- Depuis l'IDE
- IntelliJ Idea
- Eclipse
- VsCode (peu recommandé)
![[Pasted image 20260210120312.webp|200]]
Le logo de Java et du JDK
### En bref
Java, connu pour ses **fonctionnalités robustes** et son **indépendance vis-à-vis des plateformes**, est l'un des langages de programmation les plus utilisés.
Sa **syntaxe claire** et sa **gestion automatique de la mémoire** contribuent à sa popularité.
# À suivre
[[1.3 - Activité - à la découverte de Idea]]