![[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]]