Aller au contenu principal

Module Java.1 – Introduction

Objectif

Comprendre Java : JVM (Java Virtual Machine), processus de compilation, portabilité, et écosystème pour développer des applications multiplateformes robustes.

Théorie

Qu'est-ce que Java ?

Java est un langage de programmation orienté objet développé par Sun Microsystems (maintenant Oracle) en 1995.

Caractéristiques principales :

  • Orienté objet : Tout est objet (sauf les types primitifs)
  • Compilé et interprété : Compilé en bytecode, exécuté par JVM
  • Multiplateforme : "Write once, run anywhere"
  • Typage statique : Types vérifiés à la compilation
  • Gestion automatique mémoire : Garbage collector intégré
  • Sécurisé : Sandboxing, pas d'accès direct à la mémoire

Utilisations principales :

  • Applications d'entreprise (backend)
  • Applications Android
  • Applications web (Spring, Jakarta EE)
  • Systèmes embarqués
  • Big Data (Hadoop, Spark)
  • Jeux vidéo (Minecraft)

JVM (Java Virtual Machine)

La JVM est le cœur de Java : elle exécute le bytecode Java.

Processus d'exécution

1. Code source (.java)

public class MonProgramme {
public static void main(String[] args) {
System.out.println("Bonjour");
}
}

2. Compilation en bytecode (.class)

javac MonProgramme.java
# Génère MonProgramme.class (bytecode)

3. Exécution par JVM

java MonProgramme
# JVM charge et exécute le bytecode

4. JIT Compilation (Just-In-Time)

  • JVM compile le bytecode en code machine natif à l'exécution
  • Optimise les parties fréquemment exécutées
  • Performance proche du code compilé natif

Avantages de la JVM

"Write once, run anywhere" :

  • Même code Java fonctionne sur toutes les plateformes
  • Pas besoin de recompiler pour chaque OS
  • Portabilité maximale

Gestion automatique mémoire :

  • Garbage collector libère automatiquement la mémoire
  • Pas de gestion manuelle (pas de malloc/free comme en C)
  • Réduit les fuites mémoire

Sécurité :

  • Sandboxing : code exécuté dans un environnement isolé
  • Vérification du bytecode avant exécution
  • Pas d'accès direct à la mémoire système

Performance :

  • JIT compilation optimise le code à l'exécution
  • Performance proche du code natif
  • Optimisations adaptatives

Compilation

Processus de compilation

Étape 1 : Compilation

javac MonProgramme.java

Ce qui se passe :

  1. Analyse lexicale et syntaxique
  2. Vérification des types
  3. Génération du bytecode (.class)
  4. Vérification des erreurs

Étape 2 : Exécution

java MonProgramme

Ce qui se passe :

  1. JVM charge le fichier .class
  2. Vérification du bytecode
  3. Interprétation ou compilation JIT
  4. Exécution

Structure d'un fichier .class

Le bytecode est un format binaire :

  • Instructions pour la JVM
  • Métadonnées (noms de classes, méthodes)
  • Constantes

Inspection du bytecode :

javap -c MonProgramme.class  # Affiche le bytecode

Portabilité

Principe

Le même code Java fonctionne sur :

  • Windows (JVM Windows)
  • macOS (JVM macOS)
  • Linux (JVM Linux)
  • Autres plateformes avec JVM disponible

Exemple :

// Code identique sur toutes les plateformes
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}

Compilé une fois, exécutable partout où il y a une JVM.

JVM par plateforme

Chaque plateforme a sa propre JVM :

  • Windows : JVM Windows (Oracle, OpenJDK)
  • macOS : JVM macOS
  • Linux : JVM Linux
  • Android : Dalvik/ART (variante pour mobile)

Toutes exécutent le même bytecode.

Écosystème Java

Versions Java

LTS (Long Term Support) :

  • Java 8 (2014) - Très utilisé
  • Java 11 (2018) - LTS
  • Java 17 (2021) - LTS actuel recommandé
  • Java 21 (2023) - Dernier LTS

Cycle de release :

  • Nouvelle version tous les 6 mois
  • LTS tous les 3 ans
  • Support long terme pour LTS

Outils de développement

JDK (Java Development Kit) :

  • javac : Compilateur
  • java : Exécuteur JVM
  • jar : Archivage
  • javadoc : Documentation
  • jdb : Débogueur

IDEs populaires :

  • IntelliJ IDEA : Professionnel, payant (gratuit Community)
  • Eclipse : Gratuit, open source
  • NetBeans : Gratuit, open source
  • VS Code : Gratuit, avec extensions Java

Build tools :

  • Maven : Gestion de dépendances et build
  • Gradle : Build moderne et flexible
  • Ant : Ancien, moins utilisé

Frameworks populaires

Backend :

  • Spring : Framework complet pour applications d'entreprise
  • Spring Boot : Simplifie Spring
  • Jakarta EE : Standard pour applications d'entreprise

Web :

  • Spring MVC : Framework web
  • JSF : JavaServer Faces
  • Vaadin : Framework web moderne

Tests :

  • JUnit : Framework de tests unitaires
  • TestNG : Alternative à JUnit
  • Mockito : Mocking pour tests

Avantages et inconvénients

Avantages

Portabilité : Fonctionne partout ✅ Sécurité : Sandboxing, vérifications ✅ Performance : JIT compilation ✅ Écosystème riche : Nombreuses bibliothèques ✅ Maturité : Langage stable et éprouvé ✅ Communauté : Grande communauté active ✅ Gestion mémoire : Garbage collector automatique

Inconvénients

Verbosité : Code plus long que certains langages ❌ Performance mémoire : Consomme plus de mémoire ❌ Démarrage : JVM peut être lente au démarrage ❌ Complexité : Écosystème parfois complexe

Exercice

  1. Installation JDK

    • Téléchargez JDK depuis oracle.com ou openjdk.org
    • Installez sur votre système
    • Vérifiez avec java -version et javac -version
    • Notez la version installée
  2. Premier programme

    • Créez un fichier HelloWorld.java
    • Écrivez le programme classique
    • Compilez avec javac HelloWorld.java
    • Exécutez avec java HelloWorld
  3. Comprendre la compilation

    • Observez le fichier .class généré
    • Inspectez-le avec javap -c HelloWorld.class
    • Comprenez que c'est du bytecode
  4. Portabilité

    • Testez le même .class sur différentes plateformes (si possible)
    • Ou documentez comment cela fonctionnerait
    • Comprenez le principe "compile once, run anywhere"
  5. Recherche

    • Explorez l'écosystème Java
    • Identifiez 3 frameworks populaires
    • Notez leurs cas d'usage

Quiz

  1. Que signifie JVM ?

    • Java Virtual Memory
    • Java Virtual Machine
    • Java Variable Manager
  2. Que signifie "Write once, run anywhere" ?

    • Écrire une fois, compiler partout
    • Compiler une fois, exécuter partout
    • Écrire une fois, optimiser partout
  3. Que fait javac ?

    • Exécute le programme
    • Compile le code source en bytecode
    • Débogue le programme
  4. Qu'est-ce que le bytecode ?

    • Code source Java
    • Code intermédiaire exécuté par JVM
    • Code machine natif
  5. Quelle version Java LTS est recommandée actuellement ?

    • Java 8
    • Java 17 ou 21
    • Java 11

Mini défi

Mission : Explorer l'écosystème Java complet

  1. Installation complète

    • Installez JDK (dernière version LTS recommandée)
    • Vérifiez que javac et java fonctionnent
    • Configurez JAVA_HOME si nécessaire
  2. Premier projet

    • Créez un projet "MonPremierProjetJava"
    • Structurez avec des packages
    • Créez plusieurs classes
  3. Compilation et exécution

    • Compilez votre projet
    • Exécutez-le
    • Comprenez le processus complet
  4. Documentation

    • Explorez la documentation Java officielle
    • Identifiez 3 concepts importants
    • Notez les ressources utiles
  5. Écosystème

    • Explorez Maven Central (mvnrepository.com)
    • Identifiez 5 bibliothèques populaires
    • Notez leurs utilités

Objectif : Avoir une compréhension complète de Java, JVM, et de l'écosystème, avec un environnement fonctionnel.


Validation : Vous pouvez passer au module suivant quand vous comprenez JVM, la compilation, la portabilité et avez un environnement Java configuré.