Le parcours Programme Planning Projets Commencer le cours →
De zéro à développeur · Java 21 LTS

Apprends le Java
comme on écrit
sa première ligne.

Tu n'as jamais programmé ? Parfait. Ce cours part vraiment de zéro et t'emmène jusqu'à tes propres projets — avec des mots simples, du code que tu tapes, et des quiz à chaque étape.

26chapitres
5+1projets guidés
8semaines
100%débutant
Main.java — mon premier programme RUN
1public class Main { 2 public static void main(String[] args) { 3 System.out.println("Bonjour Java !"); 4 } 5 }
Aucun prérequis Code expliqué ligne par ligne Quiz interactifs Corrections détaillées Suivi de progression
Comment Java fonctionne

Du texte que tu écris
au programme qui s'exécute

C'est la première chose à comprendre. Ton code fait un petit voyage avant de prendre vie. On te l'explique en détail dès le chapitre 1.

📝

Code Java

Tu écris des instructions lisibles dans un fichier.

Main.java
⚙️

Compilation

Le compilateur traduit ton texte pour la machine.

javac
📦

Bytecode

Un format intermédiaire universel est produit.

Main.class
🖥️

JVM

La machine virtuelle lit le bytecode sur ton système.

java

Exécution

Ton programme s'anime enfin dans la console.

Bonjour Java !
Pourquoi ce cours

Pensé pour celles et ceux
qui débutent vraiment

Pas de jargon lâché sans explication. Chaque notion arrive au bon moment, avec une analogie de la vie quotidienne.

🌱

On part de zéro

Variable, boucle, objet… chaque mot technique est défini la première fois : ce que c'est, à quoi ça sert, et un exemple concret.

🧩

Une méthode répétée

Explication simple → analogie → code → explication ligne par ligne → résultat → erreur fréquente → exercice → correction.

🎮

On apprend en codant

Cinq mini-projets (calculatrice, jeu du nombre mystère…) et un projet final complet : un gestionnaire de budget.

Quiz à chaque étape

Des quiz interactifs à la fin de chaque chapitre, avec correction immédiate, pour valider tes acquis sans stress.

🐞

Les erreurs, des amies

On t'apprend à lire un message d'erreur sans paniquer et à déboguer — une compétence clé de tout développeur.

📈

Ta progression suivie

Marque chaque chapitre comme terminé : ta barre de progression est sauvegardée automatiquement dans ton navigateur.

Le programme complet

26 chapitres, 5 modules,
une progression logique

Clique sur un chapitre pour l'ouvrir directement. Chaque module s'appuie sur le précédent — rien n'est utilisé avant d'être expliqué.

01

Les fondations

Comprendre, installer, écrire son premier code

7 chapitres
02

Logique & structure

Décider, répéter, organiser, manipuler

5 chapitres
03

Programmation orientée objet

Classes, objets, héritage, collections

3 chapitres
04

Robustesse & outils

Erreurs, fichiers, bonnes pratiques, Git, débogage

5 chapitres
05

Pratique & ressources

Projets, évaluations, planning, glossaire

6 chapitres
On construit du concret

Six projets pour transformer
la théorie en savoir-faire

Chaque projet est fourni avec son code complet, expliqué, et des défis d'amélioration.

🧮

Calculatrice

Menu, quatre opérations, gestion propre de la division par zéro.

Scanner · switch · méthodes
🎲

Nombre mystère

Nombre aléatoire, indices « plus grand / plus petit », compteur, rejouer.

Random · boucles · conditions
🔄

Convertisseur

Températures, distances, devises, durées — plusieurs conversions au menu.

méthodes · double · modulo

Gestionnaire de tâches

Ajouter, afficher, terminer, supprimer — une vraie to-do list à objets.

classe · ArrayList · toString
📇

Gestionnaire de contacts

Rechercher, modifier, supprimer, et tout sauvegarder dans un fichier.

objets · recherche · fichiers
💰

Projet final : Budget

Revenus, dépenses par catégorie, solde, persistance — développé en 6 étapes.

tout le cours réuni
Un rythme réaliste

Ton planning sur 8 semaines

Environ 5 à 7 heures par semaine. Mieux vaut un peu chaque jour qu'un marathon le dimanche.

SEMAINE 1
Découverte

Comprendre Java, installer les outils, écrire « Hello World ».

≈ 5 h · Ch. 1–3
SEMAINE 2
Variables & saisie

Types, opérateurs, lire ce que tape l'utilisateur.

≈ 6 h · Ch. 4–7
SEMAINE 3
Décider & répéter

Conditions, boucles, et ton premier jeu interactif.

≈ 6 h · Ch. 8–9
SEMAINE 4
Structurer

Méthodes, tableaux, chaînes + première évaluation.

≈ 7 h · Ch. 10–12
SEMAINE 5
Objets

Classes, encapsulation, héritage, polymorphisme.

≈ 6 h · Ch. 13–14
SEMAINE 6
Collections & erreurs

ArrayList, exceptions, gestionnaire de tâches.

≈ 7 h · Ch. 15–16
SEMAINE 7
Outils du pro

Fichiers, bonnes pratiques, Git, débogage.

≈ 6 h · Ch. 17–20
SEMAINE 8
Projet final

Le gestionnaire de budget, de A à Z + évaluation finale.

≈ 7 h · Ch. 22

Ta première ligne de code
t'attend.

Pas besoin de t'inscrire, pas besoin de carte bancaire. Ouvre le chapitre 1 et tape ton premier programme dans les 5 minutes.

Ouvrir le chapitre 1
Chapitre 1 / 26
Module 1 · Chapitre 01

Découvrir la programmation

🎓 Ce que tu sauras faire
  • Expliquer ce qu'est programmer, avec tes propres mots
  • Dire ce qu'est Java et où on l'utilise
  • Comprendre le rôle du JDK, de la JVM et du compilateur
  • Distinguer le code source du programme compilé

Programmer, c'est quoi ?

Programmer, c'est écrire une suite d'instructions très précises qu'un ordinateur va exécuter. La machine est extrêmement rapide et obéissante, mais sans aucune imagination : elle fait exactement ce qu'on lui dit, ni plus ni moins.

📖 Analogie

C'est comme écrire une recette pour quelqu'un qui suit chaque phrase au pied de la lettre. « Casser les œufs » doit venir avant « battre les œufs ». Si tu inverses, le plat est raté. L'ordinateur est ce cuisinier ultra-rapide mais ultra-littéral.

📌 Vocabulaire

Un algorithme est la logique d'une solution (les étapes à suivre). Le code est la traduction de cet algorithme dans un langage que la machine comprend.

Qu'est-ce que Java ?

Java est un langage de programmation créé en 1995, réputé pour sa robustesse et sa portabilité. Sa promesse : « écris une fois, exécute partout ». Un même programme tourne sur Windows, macOS, Linux, un serveur ou Android.

DomaineExemples
Applications d'entrepriseBanques, assurances, gros systèmes de gestion
AndroidUne grande partie des applications mobiles
Web & Big DataServeurs (Spring), Hadoop, Kafka, Elasticsearch
JeuxMinecraft (version originale) est écrit en Java
⚠️ Attention

Java ≠ JavaScript. Malgré leurs noms voisins, ce sont deux langages totalement différents. C'est comme « carotte » et « carte » : proche à l'oreille, sans rapport.

Comment ton code prend vie

Quand tu écris du Java, ton texte n'est pas compris directement par l'ordinateur. Il fait un petit voyage :

Code Java .java Compilation javac Bytecode .class JVM Exécution
📖 Les 4 mots-clés
  • Code source : le texte lisible que tu écris (fichier .java).
  • Compilateur (javac) : traduit ton code en bytecode.
  • JVM (Java Virtual Machine) : lit le bytecode et exécute le programme sur ta machine. C'est elle qui rend Java portable.
  • JDK (Java Development Kit) : la boîte à outils complète (compilateur + JVM + bibliothèques). C'est ce qu'on installe.
📌 À retenir

Le bytecode est un film numérique universel ; la JVM est le lecteur vidéo adapté à chaque appareil. Le film est le même, seul le lecteur change.

🧠 Quiz — Chapitre 1
Clique sur la bonne réponse, la correction est immédiate.
1. Qui exécute le bytecode ?
Le compilateur
La JVM
L'éditeur de texte
2. Quel fichier contient ton code source ?
Un fichier .java
Un fichier .class
Un fichier .exe
3. Qu'est-ce qui rend Java « exécutable partout » ?
Le fichier .java
Le compilateur seul
La JVM
Module 1 · Chapitre 02

Installer son environnement

🎓 Ce que tu sauras faire
  • Installer le JDK (Java 21) sur Windows, macOS ou Linux
  • Vérifier l'installation avec java --version
  • Installer IntelliJ IDEA (ou VS Code)
  • Créer un projet, une classe, et lire une erreur dans la console
📖 IDE

Un IDE (environnement de développement intégré) est un logiciel tout-en-un pour programmer : éditeur intelligent, bouton d'exécution, détecteur d'erreurs, débogueur. On utilisera IntelliJ IDEA Community Edition (gratuit).

Étape 1 — Installer le JDK

On prend Eclipse Temurin (Adoptium), gratuit et simple. Rends-toi sur adoptium.net et choisis Temurin 21 (LTS).

Terminal — Linux
# Ubuntu / Debian
sudo apt install openjdk-21-jdk

# Fedora
sudo dnf install java-21-openjdk-devel

Sur Windows, lance le fichier .msi et coche « Add to PATH ». Sur macOS, lance le .pkg (ou brew install --cask temurin@21).

Étape 2 — Vérifier l'installation

Ouvre un terminal (PowerShell sur Windows, Terminal sur macOS/Linux) et tape :

Terminal
java --version
javac --version
Résultat attenduopenjdk 21.0.5 2024-10-15 LTS javac 21.0.5
🐞 Erreur fréquente

Si le terminal répond 'java' n'est pas reconnu, le JDK n'est pas dans le PATH. Ferme/rouvre le terminal, ou réinstalle en cochant « Add to PATH », ou redémarre.

Étape 3 — IntelliJ IDEA

Télécharge la Community Edition (gratuite) sur jetbrains.com/idea. Puis crée ton projet : New Project → nom PremierProjet → JDK 21Create.

📖 Projet · package · classe

Un projet contient tout ton travail. Un package range tes classes par thème. Une classe est un fichier de code (.java).

⚠️ Attention

Une classe publique Main doit être dans un fichier Main.java (même nom, même casse). IntelliJ le crée pour toi.

Lire une erreur, trouver sa ligne

Console — erreurException in thread "main" java.lang.ArithmeticException: / by zero at Main.main(Main.java:7)

Ce message est ton ami : il dit le type d'erreur (division par zéro) et (Main.java:7 = ligne 7). Double-clique sur la ligne bleue dans IntelliJ pour y aller.

💡 Règle d'or

Lis toujours la première ligne (le type d'erreur) et cherche le numéro de ligne de ton fichier. 90 % des débutants paniquent sans lire ; ceux qui lisent résolvent en une minute.

🧠 Quiz — Chapitre 2
1. Quelle commande montre la version du compilateur ?
java --version
javac --version
version java
2. Dans Main.java:7, que signifie 7 ?
7 erreurs
La ligne de l'erreur
La version de Java
3. IntelliJ IDEA Community Edition est…
Gratuit
Payant
Module 1 · Chapitre 03

Ton premier programme Java

🎓 Ce que tu sauras faire
  • Écrire, comprendre et exécuter « Hello World »
  • Reconnaître le rôle de public, class, static, void, main
  • Utiliser System.out.println

Le programme « Hello World »

Recopie ce code dans ta classe Main et lance-le (flèche verte ▶) :

Main.java
public class Main {
    public static void main(String[] args) {
        System.out.println("Bonjour Java !");
    }
}
ConsoleBonjour Java !
💡 Conseil

Tu n'as pas à mémoriser tout de suite ces mots. Recopie-les : c'est la « formule magique » de départ. On les explique juste pour lever le mystère.

Chaque mot expliqué

ÉlémentRôle
public« Accessible de partout » — un niveau de visibilité.
classDéclare une classe, la « boîte » qui contient ton programme.
MainLe nom de la classe (= nom du fichier Main.java).
staticPermet de lancer main sans créer d'objet (on verra pourquoi au ch. 13).
void« Ne renvoie rien ».
mainLe point d'entrée : le programme commence ici.
System.out.printlnAffiche du texte dans la console puis passe à la ligne.
📌 Les deux signes clés

Les accolades { } délimitent un bloc (toujours par paire). Le point-virgule ; termine une instruction, comme le point d'une phrase.

Erreurs fréquentes

🐞 À éviter
  • Point-virgule oublié → erreur « ';' expected ».
  • Guillemets manquants : le texte doit être entre "...".
  • Accolade non fermée : chaque { a son }.
  • Casse : c'est println (minuscules) et System (majuscule).
Exercice 3.1 Facile

Consigne : affiche ton prénom, ta ville, puis « Je débute en Java ! » sur trois lignes.

Voir la correction
Main.java
System.out.println("Jonathan");
System.out.println("Genève");
System.out.println("Je débute en Java !");

Chaque println affiche une ligne puis passe à la suivante, ce qui empile les trois textes.

🧠 Quiz — Chapitre 3
1. Quel est le point d'entrée d'un programme ?
class
main
System
2. Que fait print("A"); print("B"); ?
Affiche AB sur la même ligne
Affiche A puis B sur 2 lignes
3. Le point-virgule sert à…
Ouvrir un bloc
Terminer une instruction
Module 1 · Chapitre 04

Les commentaires

🎓 Ce que tu sauras faire
  • Écrire des commentaires d'une ligne, de plusieurs lignes, de documentation
  • Savoir quand un commentaire est utile… et quand il est inutile

À quoi ça sert ?

Un commentaire est un texte pour les humains, que Java ignore complètement. Il sert à expliquer ou à désactiver temporairement du code.

commentaires.java
// Commentaire sur une seule ligne
System.out.println("Salut"); // en fin de ligne aussi

/* Commentaire
   sur plusieurs lignes */

/** Commentaire de DOCUMENTATION (Javadoc)
 *  décrit une classe ou une méthode */
✅ Bonne pratique

Un bon commentaire explique le pourquoi, pas le quoi. Le code dit déjà ce qu'il fait.

exemple.java
// Taux de TVA suisse standard en 2026
double tva = 0.081;
🐞 Commentaire inutile

int age = 18; // on met 18 dans age — on le voit déjà, ça n'apporte rien.

💡 Astuce

Dans IntelliJ, Ctrl + / (Cmd + / sur Mac) commente/décommente la ligne sélectionnée.

🧠 Quiz — Chapitre 4
1. Un commentaire est-il exécuté par Java ?
Oui
Non, il est ignoré
2. Syntaxe d'un commentaire sur plusieurs lignes ?
// ... //
/* ... */
<!-- ... -->
Module 1 · Chapitre 05

Les variables et les types

🎓 Ce que tu sauras faire
  • Déclarer, initialiser et modifier une variable
  • Choisir le bon type : int, double, boolean, char, String
  • Créer une constante avec final

Qu'est-ce qu'une variable ?

Une variable est une boîte nommée dans la mémoire, dans laquelle on range une valeur pour la réutiliser.

Nom ageBoîte mémoire [ 25 ]
📖 Analogie

Une variable est un tiroir étiqueté. L'étiquette est le nom (age), le contenu est la valeur (25). On peut l'ouvrir pour lire ou changer ce qu'il contient.

Déclarer, initialiser, modifier

variables.java
int age;          // 1) DÉCLARATION : je crée la boîte
age = 25;         // 2) INITIALISATION : je range 25
age = 26;         // 3) MODIFICATION : je remplace

int annee = 2026;  // déclaration + initialisation en une ligne
📌 Anatomie

int age = 25; = type + nom + = + valeur + ;. Le = signifie « reçoit », pas « égal ».

Les types de base

TypeContientExemple
intEntierint n = 42;
longTrès grand entierlong p = 9000000000L;
doubleNombre à virguledouble prix = 9.99;
booleantrue / falseboolean ok = true;
charUn caractèrechar c = 'A';
StringDu texteString nom = "Jo";
⚠️ Attention

'A' (char, apostrophes) et "A" (String, guillemets doubles) ne sont pas la même chose pour Java !

Les constantes avec final

constantes.java
final double TVA = 0.081;
TVA = 0.1; // ❌ ERREUR : une constante ne change jamais
✅ Bonne pratique

Nomme tes variables clairement (ageUtilisateur, pas x), en camelCase. Les constantes en MAJUSCULES : AGE_MAJORITE.

Exercice 5.1 Intermédiaire

Consigne : déclare PRIX_UNITAIRE = 4.5 (constante) et quantite = 3. Calcule et affiche le total.

Voir la correction
Main.java
final double PRIX_UNITAIRE = 4.5;
int quantite = 3;
double total = PRIX_UNITAIRE * quantite;
System.out.println("Total : " + total + " €"); // 13.5 €

Le prix est fixe → final. Le * multiplie.

🧠 Quiz — Chapitre 5
1. Quel type pour un prix comme 9.99 ?
int
double
boolean
2. final sert à…
Terminer le programme
Empêcher de modifier la variable
3. Pour un vrai/faux, on utilise…
int
char
boolean
Module 1 · Chapitre 06

Les opérateurs

🎓 Ce que tu sauras faire
  • Faire des calculs : + - * / %
  • Comparer et combiner des conditions (&& || !)
  • Ne plus confondre =, == et !=

Les opérateurs arithmétiques

OpérateurRôleExemple → résultat
+ - *Addition, soustraction, multiplication7 * 3 → 21
/Division7 / 2 → 3 (piège !)
%Modulo (reste)7 % 2 → 1
⚠️ Piège de la division entière

7 / 2 donne 3, pas 3.5 ! Deux entiers → division entière. Pour 3.5, il faut un nombre à virgule : 7.0 / 2.

📖 Modulo

% donne le reste. 17 % 5 = 2. Parfait pour tester si un nombre est pair : n % 2 == 0.

= vs == vs !=

📌 Différence capitale
SymboleSignification
=Affectation : « range dans » — age = 18;
==Égalité : « est-il égal ? » — age == 18
!=Différent : « est-il différent ? »

Les opérateurs logiques

OpérateurVrai quand…Analogie
&& (ET)les deux sont vraismajeur ET permis
|| (OU)au moins un est vraicarte OU espèces
! (NON)on inverseNON connecté
logique.java
int age = 20; boolean aPermis = true;
System.out.println(age >= 18 && aPermis); // true
System.out.println(!aPermis);             // false
Exercice 6.1 Facile

Consigne : avec n = 24, affiche true ou false selon que n est pair.

Voir la correction
Main.java
int n = 24;
System.out.println(n % 2 == 0); // true

Un nombre pair a un reste de 0 dans la division par 2.

🧠 Quiz — Chapitre 6
1. Que vaut 9 / 2 (deux int) ?
4
4.5
5
2. Quel opérateur teste l'égalité ?
=
==
3. true && false vaut…
true
false
Module 1 · Chapitre 07

Les entrées utilisateur

🎓 Ce que tu sauras faire
  • Demander une info avec Scanner
  • Lire du texte (nextLine) et des nombres (nextInt)
  • Éviter le piège nextInt() / nextLine()

Lire une saisie avec Scanner

📖 import

import java.util.Scanner; va chercher l'outil Scanner dans la bibliothèque Java. Comme sortir un outil de la boîte avant de s'en servir.

Main.java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Ton prénom ? ");
        String prenom = sc.nextLine();
        System.out.println("Bonjour " + prenom + " !");
        sc.close();
    }
}
ConsoleTon prénom ? Jonathan Bonjour Jonathan !

Le piège à connaître

🐞 La ligne « sautée »

Après nextInt(), un nextLine() semble avalé : nextInt() laisse le « Entrée » dans le tampon. Solution : ajoute un sc.nextLine(); vide après le nextInt().

piege.java
System.out.print("Âge ? ");
int age = sc.nextInt();
sc.nextLine(); // ✅ on avale le retour à la ligne
System.out.print("Ville ? ");
String ville = sc.nextLine();
🐞 Le + qui colle

"Somme : " + a + b avec a=8, b=5 affiche Somme : 85, pas 13 ! Mets le calcul entre parenthèses : "Somme : " + (a + b).

Exercice 7.1 Intermédiaire

Consigne : demande le prénom puis l'année de naissance, et affiche l'âge approximatif (on est en 2026).

Voir la correction
Main.java
System.out.print("Prénom : ");
String prenom = sc.nextLine();
System.out.print("Année de naissance : ");
int annee = sc.nextInt();
int age = 2026 - annee;
System.out.println(prenom + ", tu as environ " + age + " ans.");

Ici nextLine() vient avant nextInt() : pas de piège.

🧠 Quiz — Chapitre 7
1. Quelle méthode lit un entier ?
nextLine()
nextInt()
readInt()
2. Avec a=3, b=4 : "R:" + a + b affiche…
R:7
R:34
Module 2 · Chapitre 08

Les conditions

🎓 Ce que tu sauras faire
  • Faire décider ton programme avec if, else, else if
  • Combiner et imbriquer des conditions
  • Utiliser switch pour choisir parmi plusieurs cas

La condition if / else

Une condition exécute du code seulement si quelque chose est vrai. Analogie : « si il pleut, je prends un parapluie ».

conditions.java
int age = 15;
if (age >= 18) {
    System.out.println("Tu es majeur.");
} else {
    System.out.println("Tu es mineur.");
}
ConsoleTu es mineur.

else if : plusieurs cas

note.java
int note = 14;
if (note >= 16)      System.out.println("Très bien");
else if (note >= 14) System.out.println("Bien");
else if (note >= 10) System.out.println("Passable");
else                 System.out.println("Insuffisant");
⚠️ L'ordre compte

Java teste de haut en bas et s'arrête à la première condition vraie. Va du cas le plus exigeant au moins exigeant.

Comparer du texte

⚠️ Règle d'or

Pour comparer deux String, utilise a.equals(b), jamais == (on verra pourquoi au ch. 12).

mdp.java
if (saisie.equals("java2026")) {
    System.out.println("Accès autorisé ✅");
} else {
    System.out.println("Accès refusé ❌");
}

Le switch

menu.java
switch (choix) {
    case 1 -> System.out.println("Nouvelle partie");
    case 2 -> System.out.println("Charger");
    default -> System.out.println("Choix invalide");
}
💡 Conseil

switch est plus clair qu'une longue série de else if quand on compare une même variable à plusieurs valeurs précises. default gère « tous les autres cas ».

Exercice 8.1 Intermédiaire

Consigne : demande un nombre et indique s'il est positif, négatif ou nul.

Voir la correction
Main.java
int n = sc.nextInt();
if (n > 0)      System.out.println("Positif");
else if (n < 0) System.out.println("Négatif");
else            System.out.println("Nul");
🧠 Quiz — Chapitre 8
1. else s'exécute quand la condition du if est…
Vraie
Fausse
2. On compare deux String avec…
==
.equals()
3. Le mot-clé « tous les autres cas » dans un switch :
else
other
default
Module 2 · Chapitre 09

Les boucles

🎓 Ce que tu sauras faire
  • Répéter des actions avec for, while, do while
  • Choisir la bonne boucle selon la situation
  • Utiliser break et continue

La boucle for

Une boucle répète un bloc sans le réécrire. Analogie : « répète 10 pompes ». À utiliser quand on connaît le nombre de tours.

for.java
for (int i = 1; i <= 10; i++) {
    System.out.println(i);
}
PartieRôle
int i = 1Initialisation (une seule fois)
i <= 10Condition (tant qu'elle est vraie, on continue)
i++Incrément (après chaque tour)

while et do while

while : on répète « tant que » une condition est vraie (peut-être 0 fois). do while : teste à la fin, donc s'exécute au moins une fois (idéal pour un menu).

while.java
int compte = 5;
while (compte > 0) {
    System.out.println(compte);
    compte--; // ⚠️ sans ça : boucle infinie !
}
System.out.println("Décollage !");
🐞 Boucle infinie

Si la condition ne devient jamais fausse, le programme se fige. Vérifie toujours qu'une variable évolue vers la sortie (ici compte--).

Quelle boucle choisir ?

SituationBoucle
Je connais le nombre de toursfor
Je répète tant qu'une condition est vraie (peut-être 0 fois)while
Je veux exécuter au moins une foisdo while
💡 break & continue

break sort de la boucle immédiatement. continue saute au tour suivant.

Exercice 9.1 Intermédiaire

Consigne : calcule et affiche la somme des nombres de 1 à 100 (attendu : 5050).

Voir la correction
Main.java
int somme = 0;
for (int i = 1; i <= 100; i++) {
    somme += i; // on accumule
}
System.out.println(somme); // 5050

On part de 0 et on ajoute chaque nombre : le motif de l'accumulateur.

🧠 Quiz — Chapitre 9
1. Quelle boucle s'exécute au moins une fois ?
for
while
do while
2. Combien de tours fait for (int i=0; i<5; i++) ?
4
5
6
3. break sert à…
Sauter un tour
Sortir de la boucle
Module 2 · Chapitre 10

Les méthodes

🎓 Ce que tu sauras faire
  • Découper un programme en méthodes
  • Utiliser paramètres, arguments et valeur de retour
  • Comprendre void, la portée et la surcharge

Qu'est-ce qu'une méthode ?

Une méthode est un bloc d'instructions nommé qu'on peut « appeler » à volonté. Analogie : un mixeur — tu mets des fruits (paramètres), tu appuies (l'appel), il rend un smoothie (valeur de retour).

💡 Pourquoi découper ?

Éviter les répétitions, gagner en lisibilité, corriger à un seul endroit.

Paramètres, arguments, retour

methodes.java
public class Main {
    // a et b sont des PARAMÈTRES ; renvoie un int
    static int additionner(int a, int b) {
        return a + b;
    }
    public static void main(String[] args) {
        int r = additionner(3, 5); // 3 et 5 = ARGUMENTS
        System.out.println("Somme : " + r); // Somme : 8
    }
}
Arguments 3, 5additionner(a,b)return 8
📖 Paramètre vs argument

Le paramètre est déclaré dans la méthode (« il me faut deux nombres »). L'argument est la valeur réelle passée à l'appel (« voici 3 et 5 »).

📌 void ou retour ?

void = fait quelque chose sans rien renvoyer. Un type (int, boolean…) = calcule et renvoie une valeur, récupérable avec =.

Portée & surcharge

Une variable déclarée dans une méthode n'existe que là (variable locale). La surcharge permet plusieurs méthodes de même nom avec des paramètres différents.

Exercice 10.1 Intermédiaire

Consigne : écris estPair(int n) qui renvoie un boolean, puis affiche les nombres pairs de 1 à 20.

Voir la correction
Main.java
static boolean estPair(int n) {
    return n % 2 == 0;
}
// main :
for (int i = 1; i <= 20; i++) {
    if (estPair(i)) System.out.println(i);
}

On sépare la logique (est-ce pair ?) de l'action (afficher) : lisible et réutilisable.

🧠 Quiz — Chapitre 10
1. Que signifie void ?
Renvoie un entier
Ne renvoie rien
2. La surcharge, c'est…
Même nom, paramètres différents
Noms différents
Module 2 · Chapitre 11

Les tableaux

🎓 Ce que tu sauras faire
  • Créer un tableau, comprendre les index
  • Lire, modifier, connaître la taille avec length
  • Parcourir avec for et for-each

Qu'est-ce qu'un tableau ?

Un tableau contient plusieurs valeurs du même type dans des cases numérotées. On compte à partir de 0 : la 1re case a l'index 0.

[0] 12[1] 15[2] 9[3] 18
tableaux.java
int[] notes = {12, 15, 9, 18};
System.out.println(notes[0]);     // 12
notes[2] = 11;               // modifie la 3e case
System.out.println(notes.length); // 4
🐞 Index hors limites

Un tableau de 4 cases a les index 0 à 3. notes[4]ArrayIndexOutOfBoundsException. Le dernier index est length - 1.

Parcourir un tableau

parcours.java
// for classique (avec index)
for (int i = 0; i < notes.length; i++) {
    System.out.println(notes[i]);
}
// for-each (plus simple)
for (int note : notes) {
    System.out.println(note);
}
💡 Conseil

for-each pour juste lire chaque valeur ; for classique quand tu as besoin de l'index (pour modifier ou connaître la position).

Exercice 11.1 Intermédiaire

Consigne : pour {12, 8, 15, 10, 18}, trouve et affiche la plus grande note.

Voir la correction
Main.java
int[] notes = {12, 8, 15, 10, 18};
int max = notes[0];
for (int n : notes) {
    if (n > max) max = n;
}
System.out.println("Max : " + max); // 18

On suppose que la 1re est la plus grande, puis on met à jour dès qu'on trouve mieux.

🧠 Quiz — Chapitre 11
1. Le premier élément a l'index…
1
0
2. La taille d'un tableau t se lit…
t.size()
t.length
Module 2 · Chapitre 12

Les chaînes de caractères

🎓 Ce que tu sauras faire
  • Manipuler du texte avec String et ses méthodes
  • Concaténer, transformer, chercher, découper
  • Comprendre pourquoi comparer avec .equals() et non ==

Les méthodes essentielles

MéthodeExemple → résultat
length()"Java".length() → 4
toUpperCase()"java".toUpperCase() → "JAVA"
contains()"Bonjour".contains("jour") → true
equals()"a".equals("a") → true
equalsIgnoreCase()"OUI".equalsIgnoreCase("oui") → true
substring()"Bonjour".substring(0,3) → "Bon"
trim()" hi ".trim() → "hi"
💡 On peut enchaîner

s.trim().toUpperCase() applique trim() puis toUpperCase() sur le résultat.

Pourquoi .equals() et pas == ?

📌 Règle d'or

Pour comparer le contenu de deux chaînes : a.equals(b). Jamais == pour des String.

== vérifie si deux variables pointent vers le même objet en mémoire. .equals() vérifie si elles ont le même contenu. Deux chaînes au texte identique peuvent être deux objets distincts.

egalite.java
String a = new String("java");
String b = new String("java");
System.out.println(a == b);      // false ❌
System.out.println(a.equals(b)); // true  ✅
📖 Référence

Une variable objet contient une référence (une adresse). == compare les adresses ; .equals() compare les contenus.

Exercice 12.1 Intermédiaire

Consigne : demande une réponse et affiche « Oui reconnu » si l'utilisateur a tapé « oui », « OUI », « Oui »…

Voir la correction
Main.java
String rep = sc.nextLine();
if (rep.equalsIgnoreCase("oui")) {
    System.out.println("Oui reconnu");
}

equalsIgnoreCase ignore majuscules/minuscules.

🧠 Quiz — Chapitre 12
1. Comment comparer deux chaînes ?
==
.equals()
2. "Bonjour".substring(0, 3) renvoie…
"Bon"
"Bonj"
"onj"
Module 3 · Chapitre 13

Introduction à la POO

🎓 Ce que tu sauras faire
  • Distinguer une classe d'un objet
  • Créer attributs, méthodes, constructeur
  • Protéger les données avec l'encapsulation

Classe et objet

📖 Analogie

Une classe est un plan d'architecte ; chaque maison construite à partir de ce plan est un objet (une instance). Un seul plan, plusieurs maisons.

Classe Personne→ new →Jonathan, 30Léa, 25
📌 Attribut vs méthode

Un attribut est une donnée (ce que l'objet possède : prénom, âge). Une méthode est une action (ce que l'objet fait : se présenter).

Notre classe Personne

Personne.java
public class Personne {
    String prenom;   // attributs
    int age;

    // Constructeur (même nom que la classe)
    Personne(String prenom, int age) {
        this.prenom = prenom; // this = l'objet courant
        this.age = age;
    }
    void sePresenter() {
        System.out.println("Je suis " + prenom + ", " + age + " ans.");
    }
}
Main.java
Personne p1 = new Personne("Jonathan", 30);
p1.sePresenter(); // Je suis Jonathan, 30 ans.
📖 new & this

new fabrique un objet. this.prenom = prenom range le paramètre dans l'attribut de cet objet.

L'encapsulation

📖 Encapsulation

Cacher les attributs (private) et n'y accéder que par des méthodes contrôlées (getters pour lire, setters pour modifier). Analogie : un distributeur de billets — tu passes par l'écran, pas par le coffre.

CompteBancaire.java
public class CompteBancaire {
    private double solde; // caché

    public double getSolde() { return solde; }

    public void deposer(double montant) {
        if (montant > 0) solde += montant; // on vérifie avant
    }
}
Exercice 13.1 Défi

Consigne : crée Etudiant avec private double moyenne, un constructeur, un getter, et estAdmis() qui renvoie true si moyenne ≥ 10.

Voir la correction
Etudiant.java
public class Etudiant {
    private double moyenne;
    public Etudiant(double m) { this.moyenne = m; }
    public double getMoyenne() { return moyenne; }
    public boolean estAdmis() { return moyenne >= 10; }
}

L'attribut private se lit seulement via le getter : les données sont protégées.

🧠 Quiz — Chapitre 13
1. Le constructeur porte le nom…
main
de la classe
2. Le mot-clé qui désigne l'objet courant :
self
this
me
3. Un attribut private est accessible depuis une autre classe ?
Oui
Non
Module 3 · Chapitre 14

Héritage et polymorphisme

🎓 Ce que tu sauras faire
  • Comprendre l'héritage parent → enfant
  • Utiliser extends, super, @Override
  • Découvrir le polymorphisme

L'héritage

📖 Analogie

Tous les animaux mangent. Un chien est un animal : il hérite de « manger » et ajoute « aboyer ». On ne réécrit pas « manger » pour chaque espèce.

Animal.java
public class Animal {
    String nom;
    Animal(String nom) { this.nom = nom; }
    void faireDuBruit() {
        System.out.println(nom + " fait un bruit.");
    }
}
Chien.java
public class Chien extends Animal {
    Chien(String nom) { super(nom); } // constructeur parent
    @Override
    void faireDuBruit() {
        System.out.println(nom + " aboie : Wouf !");
    }
}
Animal manger() · faireDuBruit()
Chien → WoufChat → Miaou
📖 Les mots-clés
  • extends : « Chien est un Animal ».
  • super(...) : appelle le constructeur parent.
  • @Override : redéfinit une méthode héritée (et vérifie les fautes de frappe).

Le polymorphisme

Main.java
Animal[] animaux = { new Chien("Rex"), new Chat("Félix") };
for (Animal a : animaux) {
    a.faireDuBruit(); // chacun réagit selon son vrai type !
}
ConsoleRex aboie : Wouf ! Félix miaule : Miaou !
📖 Polymorphisme

« Plusieurs formes ». On traite Chien et Chat comme des Animal ; à l'appel, Java exécute la bonne version selon le vrai type. Une consigne « faites du bruit », des réponses adaptées.

🧠 Quiz — Chapitre 14
1. Quel mot-clé crée l'héritage ?
inherits
extends
super
2. super(nom) sert à…
Appeler le constructeur parent
Créer un objet
Module 3 · Chapitre 15

Les collections

🎓 Ce que tu sauras faire
  • Différencier tableau et collection
  • Maîtriser ArrayList (ajouter, supprimer, chercher, parcourir)
  • Découvrir HashMap

Pourquoi des collections ?

Un tableau a une taille fixe. Une ArrayList est un « tableau intelligent » à taille variable : idéale quand on ne connaît pas le nombre d'éléments à l'avance.

ArrayList.java
import java.util.ArrayList;

ArrayList<String> courses = new ArrayList<>();
courses.add("Pain");          // ajouter
courses.add("Lait");
System.out.println(courses.size());       // 2
System.out.println(courses.get(0));      // Pain
courses.remove("Lait");                // supprimer
for (String c : courses) System.out.println(c);
MéthodeRôle
add(x)ajoute à la fin
get(i)lit l'élément à l'index i
remove(x)supprime
size()nombre d'éléments
contains(x)présent ? (true/false)
⚠️ Integer, pas int

Dans une collection, on utilise Integer, Double… mais Java convertit automatiquement : liste.add(5) fonctionne.

HashMap : clé → valeur

HashMap.java
import java.util.HashMap;

HashMap<String, Integer> ages = new HashMap<>();
ages.put("Léa", 25);       // clé → valeur
System.out.println(ages.get("Léa")); // 25
💡 Priorité

Pour débuter, concentre-toi sur ArrayList : c'est la collection utilisée dans nos mini-projets et le projet final.

Exercice 15.1 Intermédiaire

Consigne : crée une ArrayList<Integer> de nombres et affiche leur somme.

Voir la correction
Main.java
ArrayList<Integer> nb = new ArrayList<>();
nb.add(10); nb.add(20); nb.add(5);
int somme = 0;
for (int n : nb) somme += n;
System.out.println(somme); // 35
🧠 Quiz — Chapitre 15
1. Pour ajouter à une ArrayList :
put()
add()
push()
2. La taille d'une ArrayList :
.length
.size()
3. Une HashMap associe…
Un index à une valeur
Une clé à une valeur
Module 4 · Chapitre 16

La gestion des erreurs

🎓 Ce que tu sauras faire
  • Distinguer les types d'erreurs
  • Gérer une exception avec try, catch, finally
  • Lire un message d'erreur sans paniquer

Les familles d'erreurs

TypeExemple
SyntaxePoint-virgule oublié
CompilationVariable non déclarée
ExécutionDivision par zéro, index hors limites
LogiqueLe programme tourne mais donne un mauvais résultat
📖 Exception

Une exception interrompt le programme si elle n'est pas gérée. Analogie : le disjoncteur qui saute. Un try/catch rattrape le problème et continue.

try / catch / finally

erreurs.java
try {
    int resultat = 10 / 0;   // code risqué
} catch (ArithmeticException e) {
    System.out.println("Division par zéro impossible.");
} finally {
    System.out.println("Fin du calcul."); // s'exécute toujours
}
System.out.println("Le programme continue !");
ConsoleDivision par zéro impossible. Fin du calcul. Le programme continue !

Lire un message d'erreur

ErreurException in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 3 at Main.main(Main.java:8)

3 réflexes : le type (accès hors limites), le détail (index 5 dans un tableau de 3), l'endroit (ligne 8).

📌 À retenir

Un message d'erreur est une carte au trésor : il dit quoi, pourquoi et où. Lis-le calmement, ligne par ligne.

Exercice 16.1 Défi

Consigne : combine une boucle et un try/catch pour redemander un entier tant que l'utilisateur ne tape pas un nombre valide.

Voir la correction
Main.java
int nombre = 0; boolean valide = false;
while (!valide) {
    System.out.print("Entre un entier : ");
    try {
        nombre = sc.nextInt();
        valide = true;
    } catch (Exception e) {
        System.out.println("Ce n'est pas un entier.");
        sc.nextLine(); // on vide la saisie fautive
    }
}

Boucle + try/catch = le motif classique d'une saisie robuste.

🧠 Quiz — Chapitre 16
1. Le code risqué se met dans…
catch
try
finally
2. finally s'exécute…
Toujours (erreur ou non)
Seulement en cas d'erreur
Module 4 · Chapitre 17

Lire et écrire des fichiers

🎓 Ce que tu sauras faire
  • Écrire du texte dans un fichier
  • Lire un fichier ligne par ligne
  • Gérer les erreurs liées aux fichiers

Pourquoi des fichiers ?

Sans fichier, tout disparaît à l'arrêt du programme. Un fichier conserve les données sur le disque : c'est la persistance.

Écrire dans un fichier

ecriture.java
import java.io.FileWriter;
import java.io.IOException;

try (FileWriter writer = new FileWriter("taches.txt")) {
    writer.write("Faire les courses\n"); // \n = passage à la ligne
    writer.write("Réviser Java\n");
} catch (IOException e) {
    System.out.println("Erreur : " + e.getMessage());
}
📖 try-with-resources

try (FileWriter w = ...) ferme automatiquement le fichier à la fin, même en cas d'erreur. On n'oublie jamais de fermer.

⚠️ Écraser ou ajouter ?

new FileWriter("f.txt") écrase. Pour ajouter à la fin : new FileWriter("f.txt", true).

Lire un fichier

lecture.java
import java.io.File;
import java.util.Scanner;

try (Scanner lecteur = new Scanner(new File("taches.txt"))) {
    while (lecteur.hasNextLine()) {   // tant qu'il reste une ligne
        System.out.println("→ " + lecteur.nextLine());
    }
} catch (Exception e) {
    System.out.println("Fichier introuvable !");
}
Console→ Faire les courses → Réviser Java
💡 Astuce

hasNextLine() renvoie true tant qu'il reste une ligne : la condition idéale pour une boucle de lecture.

🧠 Quiz — Chapitre 17
1. Quelle classe écrit dans un fichier ?
Scanner
FileWriter
2. new FileWriter("f.txt", true)
Ajoute à la fin sans écraser
Efface tout d'abord
Module 4 · Chapitre 18

Les bonnes pratiques

🎓 Ce que tu sauras faire
  • Écrire un code lisible, réutilisable et facile à corriger
  • Adopter les habitudes des développeurs pros

Un bon code n'est pas seulement un code qui marche : c'est un code qu'un humain (toi, dans six mois) peut relire et modifier facilement.

Les habitudes essentielles

✅ Noms clairs

nombreDeTentatives plutôt que n. Un bon nom rend le commentaire inutile.

✅ Indentation régulière

Décale le code dans chaque { }. IntelliJ : Ctrl+Alt+L réindente tout.

✅ Méthodes courtes (DRY)

Une méthode fait une chose. Si tu copies-colles du code, transforme-le en méthode : Don't Repeat Yourself.

✅ Séparer les responsabilités

Une classe = un rôle. Tache représente une tâche ; GestionnaireTaches les gère.

✅ Tester souvent

Lance après chaque petit ajout. Plus facile de trouver un bug dans 5 lignes que dans 200.

⚠️ Ne jamais copier sans comprendre

Recopier du code sans le comprendre crée des bugs impossibles à corriger. Comprends chaque ligne que tu utilises.

Avant / après

brouillon.java
int a=10;int b=20;int c=a+b;if(c>25){System.out.println("grand");}
propre.java
int largeur = 10;
int hauteur = 20;
int demiPerimetre = largeur + hauteur;

if (demiPerimetre > 25) {
    System.out.println("grand");
}

Même résultat, mais le second se lit sans effort.

Module 4 · Chapitre 19

Git et GitHub

🎓 Ce que tu sauras faire
  • Comprendre à quoi servent Git et GitHub
  • Sauvegarder un projet avec les commandes de base
  • Écrire un .gitignore

Git et GitHub, c'est quoi ?

📖 Git

Git enregistre l'historique de ton code. Analogie : une machine à remonter le temps pour ton projet. Cassé quelque chose ? Reviens à hier.

📖 GitHub

GitHub héberge tes projets Git en ligne (sauvegarde à distance + partage). Git = l'outil local ; GitHub = le cloud.

Le vocabulaire

TermeSens
Dépôt (repo)Le dossier de projet suivi par Git
CommitUne « photo » sauvegardée du code, avec un message
Push / PullEnvoyer vers / récupérer depuis GitHub
Terminal
git init
git add .
git commit -m "Premier commit : mon projet Java"
git push -u origin main
📖 .gitignore

Liste les fichiers que Git doit ignorer (fichiers compilés, réglages IDE) : *.class, /out/, /.idea/.

✅ Commits parlants

Un commit après chaque petite étape, avec un message clair (« Ajout du menu »), pas « modif ».

🧠 Quiz — Chapitre 19
1. Un commit est…
Une sauvegarde datée du code
Un bug
2. Envoyer ses commits vers GitHub :
pull
push
Module 4 · Chapitre 20

Déboguer un programme

🎓 Ce que tu sauras faire
  • Comprendre ce qu'est un bug et le reproduire
  • Déboguer avec des affichages temporaires
  • Utiliser le débogueur d'IntelliJ
📖 Bug & débogage

Un bug est une erreur produisant un comportement inattendu. Déboguer, c'est le traquer et le corriger. (Le mot vient d'un vrai insecte coincé dans un ordinateur en 1947 !)

Technique 1 — Les affichages temporaires

debug.java
for (int i = 1; i <= 5; i++) {
    total += i;
    System.out.println("DEBUG i=" + i + " total=" + total);
}

On voit évoluer les variables tour après tour et on repère où ça dérape.

Technique 2 — Le débogueur d'IntelliJ

📖 Point d'arrêt

Un point d'arrêt (breakpoint) met le programme en pause sur une ligne pour inspecter l'état.

  1. Clique dans la marge à gauche d'une ligne → point rouge.
  2. Lance en mode Debug 🐞 (icône insecte).
  3. Avance pas à pas : F8 (Step Over), F7 (Step Into), F9 (Resume).
  4. Survole une variable pour voir sa valeur en temps réel.
Exercice 20.1 Chasse au bug

Consigne : ce code doit faire la somme de 1 à 5 (attendu 15) mais donne 10. Trouve le bug.

bug.java
for (int i = 1; i < 5; i++) total += i;
Voir la correction

La condition i < 5 s'arrête à i=4 : on additionne 1+2+3+4 = 10. Le 5 est oublié. Il faut i <= 5. C'est une erreur « off-by-one » (erreur de bord) classique.

🧠 Quiz — Chapitre 20
1. Quelle touche exécute la ligne sans entrer dans les méthodes ?
F7
F8
F9
2. for (int i=1; i<5; i++) boucle combien de fois ?
4
5
Module 5 · Chapitre 21

Mini-projets guidés

🎓 Objectif

Assembler tout ce que tu as appris dans cinq projets complets, chacun avec son code entier et des défis d'amélioration. Essaie d'abord seul, puis compare.

🧮 Projet 1 — La calculatrice

Menu, 4 opérations, division par zéro gérée.

Calculatrice.java
import java.util.Scanner;

public class Calculatrice {
    static double calculer(double a, double b, int op) {
        switch (op) {
            case 1: return a + b;
            case 2: return a - b;
            case 3: return a * b;
            case 4:
                if (b == 0) throw new ArithmeticException("Division par zéro");
                return a / b;
            default: throw new IllegalArgumentException("Opération inconnue");
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("1) +  2) -  3) *  4) /");
        System.out.print("Choix : ");
        int choix = sc.nextInt();
        double a = sc.nextDouble(), b = sc.nextDouble();
        try {
            System.out.println("Résultat : " + calculer(a, b, choix));
        } catch (Exception e) {
            System.out.println("Erreur : " + e.getMessage());
        }
        sc.close();
    }
}
🎯 Défis
  • Boucler pour enchaîner plusieurs calculs.
  • Ajouter le modulo et la puissance.

🎲 Projet 2 — Le nombre mystère

Nombre aléatoire, indices « plus grand / plus petit », compteur, rejouer.

NombreMystere.java
import java.util.Random;
import java.util.Scanner;

public class NombreMystere {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random random = new Random();
        boolean rejouer = true;
        while (rejouer) {
            int secret = random.nextInt(100) + 1; // 1 à 100
            int tentative = 0, proposition;
            do {
                System.out.print("Ta proposition : ");
                proposition = sc.nextInt();
                tentative++;
                if (proposition < secret) System.out.println("C'est plus grand ⬆");
                else if (proposition > secret) System.out.println("C'est plus petit ⬇");
                else System.out.println("🎉 Trouvé en " + tentative + " essais !");
            } while (proposition != secret);
            System.out.print("Rejouer ? (oui/non) : ");
            rejouer = sc.next().equalsIgnoreCase("oui");
        }
        sc.close();
    }
}

🔄 Projet 3 — Le convertisseur

Températures, distances, devises, durées.

⚠️ Taux pédagogique

Le taux euro → franc suisse (0.95) est un exemple fixé dans le code, à but pédagogique. Les taux réels varient chaque jour.

Convertisseur.java
static double celsiusVersFahrenheit(double c) { return c * 9 / 5 + 32; }
static double kmVersMiles(double km)     { return km * 0.621371; }
static double eurosVersChf(double e)     { return e * 0.95; } // fictif
// minutes -> heures + minutes :
int heures = min / 60;  int reste = min % 60;

✅ Projet 4 — Le gestionnaire de tâches

Ajouter, afficher, terminer, supprimer — avec une classe Tache et une ArrayList.

Tache.java
public class Tache {
    private String description;
    private boolean terminee;
    public Tache(String d) { description = d; terminee = false; }
    public void marquerTerminee() { terminee = true; }
    @Override
    public String toString() {
        return (terminee ? "[X] " : "[ ] ") + description;
    }
}
GestionnaireTaches.java
ArrayList<Tache> taches = new ArrayList<>();
// Ajouter :
taches.add(new Tache("Réviser Java"));
// Afficher (numéroté à partir de 1) :
for (int i = 0; i < taches.size(); i++)
    System.out.println((i + 1) + ". " + taches.get(i));
// Terminer la tâche n° i (index i-1) :
taches.get(i - 1).marquerTerminee();
📖 toString()

Redéfinir toString() permet à println(maTache) d'afficher « [X] Réviser Java » au lieu d'une adresse mémoire.

📇 Projet 5 — Le gestionnaire de contacts

Rechercher, modifier, supprimer, et sauvegarder dans un fichier. C'est le projet le plus complet : classe Contact, ArrayList, recherche, et persistance.

GestionnaireContacts.java (extrait)
// Recherche insensible à la casse (renvoie null si absent)
static Contact rechercher(ArrayList<Contact> contacts, String nom) {
    for (Contact c : contacts)
        if (c.getNom().equalsIgnoreCase(nom)) return c;
    return null;
}
// Sauvegarde dans un fichier
try (FileWriter w = new FileWriter("contacts.txt")) {
    for (Contact c : contacts) w.write(c.getNom() + ";" + c.getTelephone() + "\n");
} catch (IOException e) { System.out.println(e.getMessage()); }
📖 split()

"Léa;0600".split(";") renvoie ["Léa", "0600"] : idéal pour relire des données « champ par champ ».

💡 Le code complet

La version intégrale de chaque projet (avec tous les menus) figure dans la version PDF du livre. Ici, on montre le cœur de chaque projet pour ne pas te noyer.

Module 5 · Chapitre 22 · Projet final

Projet final : gestionnaire de budget

🎓 Objectif

Construire, étape par étape, une vraie application console qui mobilise tout le cours : variables, conditions, boucles, méthodes, classes, objets, collections, exceptions et fichiers.

💡 Construis par étapes

Ne cherche pas à tout écrire d'un coup. À chaque étape, le programme fonctionne déjà et fait un peu plus. Teste après chacune.

Architecture

Classe Depense
montant · catégorie
ArrayList<Depense>Classe Budget
menu · calculs
budget.txt

Étape 1 — La classe Depense

Notions : classe, constructeur, encapsulation, toString().

Depense.java
public class Depense {
    private String description, categorie;
    private double montant;
    public Depense(String d, String c, double m) {
        description = d; categorie = c; montant = m;
    }
    public String getCategorie() { return categorie; }
    public double getMontant() { return montant; }
    public void setMontant(double m) { montant = m; }
    public String versLigne() { return description + ";" + categorie + ";" + montant; }
    @Override
    public String toString() { return description + " (" + categorie + ") : " + montant + " €"; }
}

Étapes 2 & 3 — Ajouter, total, solde

Notions : ArrayList, for-each, accumulateur.

Budget.java (extrait)
ArrayList<Depense> depenses = new ArrayList<>();
depenses.add(new Depense("Courses", "Alimentation", 85.5));

static double total(ArrayList<Depense> d) {
    double s = 0;
    for (Depense x : d) s += x.getMontant();
    return s;
}
// Solde = revenu - total(depenses)

Étape 4 — Total par catégorie

Budget.java (extrait)
static double totalCategorie(ArrayList<Depense> d, String cat) {
    double s = 0;
    for (Depense x : d)
        if (x.getCategorie().equalsIgnoreCase(cat)) s += x.getMontant();
    return s;
}

Étapes 5 & 6 — Modifier, supprimer, sauvegarder

Notions : index d'ArrayList, FileWriter, split(), exceptions.

Budget.java (persistance)
static void sauvegarder(double revenu, ArrayList<Depense> d) {
    try (FileWriter w = new FileWriter("budget.txt")) {
        w.write("REVENU;" + revenu + "\n");
        for (Depense x : d) w.write(x.versLigne() + "\n");
    } catch (IOException e) { System.out.println(e.getMessage()); }
}
// Au rechargement : Double.parseDouble(texte) convertit "85.5" en nombre
📌 Ce que ce projet démontre

Des objets (Depense) dans une collection (ArrayList), pilotés par des méthodes via un menu en boucle, avec calculs, gestion d'erreurs et persistance. C'est la structure d'un vrai logiciel, en plus petit.

🎯 Fais-le évoluer
  • Total automatique de chaque catégorie (avec une HashMap).
  • Alerte quand le solde devient négatif.
  • Ajoute une date à chaque dépense.
💡 Code intégral

Le programme Budget.java complet (tous les menus assemblés) est dans la version PDF.

Module 5 · Chapitre 23

Évaluations & auto-évaluation

🎓 Objectif

Mesurer tes acquis avec des évaluations interactives, et faire le point avec une grille d'auto-évaluation.

📊 Évaluation 1 — Après les bases
Chapitres 1 à 12
1. Qui exécute le bytecode ?
Le compilateur
La JVM
2. 7 / 2 (deux int) vaut…
3
3.5
3. Pour comparer deux chaînes :
==
.equals()
4. Quelle boucle s'exécute au moins une fois ?
for
while
do while
📊 Évaluation 2 — Après la POO
Chapitres 13 à 15
1. Le constructeur sert à…
Supprimer un objet
Initialiser un objet
2. extends exprime…
L'héritage
Une boucle
3. Pour une liste à taille variable :
un tableau
une ArrayList
🏆 Évaluation finale
L'ensemble du cours
1. Le fichier d'une classe publique Compte se nomme…
compte.java
Compte.java
2. 17 % 5 vaut…
3
1
2
3. Pour conserver des données après l'arrêt du programme :
une variable
un fichier

Grille d'auto-évaluation

Coche honnêtement. Objectif : atteindre « Acquis » sur les fondamentaux avant de te lancer seul.

Je sais…Pas encoreEn coursAcquis
Expliquer JDK, JVM, compilateur
Déclarer des variables, choisir le bon type
Écrire conditions et boucles
Créer méthodes, classes, objets
Utiliser ArrayList et gérer des exceptions
Lire/écrire un fichier et déboguer
Réaliser un mini-projet complet seul
Module 5 · Chapitre 24

Plan d'apprentissage sur 8 semaines

🎓 Comment l'utiliser

Environ 5 à 7 heures par semaine suffisent pour terminer en 8 semaines. Mieux vaut un peu chaque jour qu'un marathon le dimanche.

💡 La règle des 3 gestes

Chaque semaine : (1) lis et tape les exemples, (2) fais les exercices, (3) avance un projet.

SemaineChapitresProjetObjectif
11–3Comprendre Java, installer, « Hello World »
24–7Variables, opérateurs, saisie utilisateur
38–9Nombre mystèreDécider et répéter, 1er jeu
410–12Calculatrice, ConvertisseurMéthodes, tableaux, chaînes + Éval 1
513–14Classes, héritage, polymorphisme
615–16Gestionnaire de tâchesCollections, exceptions + Éval 2
717–20Gestionnaire de contactsFichiers, Git, débogage
822Projet final : BudgetApplication complète + Éval finale
📌 À retenir

Après 8 semaines, tu ne seras pas « expert » — personne ne l'est en 2 mois — mais tu seras autonome : capable de lire du code, comprendre une erreur, et construire tes propres programmes.

Module 5 · Chapitre 25

Glossaire

🎓 Les termes essentiels

Expliqués simplement, par ordre alphabétique.

TermeDéfinition simple
AlgorithmeSuite d'étapes logiques pour résoudre un problème.
ArgumentValeur réelle passée à une méthode lors de l'appel.
AttributDonnée d'un objet (ex. le prénom d'une Personne).
BugErreur produisant un comportement inattendu.
BytecodeCode intermédiaire (.class) exécuté par la JVM.
ClasseModèle décrivant attributs et méthodes ; sert à créer des objets.
ConstructeurMéthode qui initialise un objet à sa création.
EncapsulationCacher les attributs (private) et n'y accéder que par des méthodes.
ExceptionIncident à l'exécution, géré par try/catch.
HéritageUne classe enfant récupère les membres d'une classe parente (extends).
IDELogiciel tout-en-un pour programmer (ex. IntelliJ IDEA).
IndexNuméro de position dans un tableau. On compte à partir de 0.
InstanceAutre mot pour « objet ».
JDKBoîte à outils du développeur (compilateur + JVM + bibliothèques).
JVMMachine virtuelle qui exécute le bytecode ; assure la portabilité.
MéthodeBloc d'instructions nommé, appelable ; peut renvoyer une valeur.
ObjetRéalisation concrète d'une classe, créée avec new.
ParamètreVariable déclarée dans la définition d'une méthode.
PolymorphismeTraiter des objets de types différents via un type commun.
Référence« Adresse » qui indique où trouver un objet en mémoire.
TypeNature d'une valeur (int, double, boolean, String…).
VariableEspace mémoire nommé contenant une valeur réutilisable.
Module 5 · Chapitre 26

Conclusion & feuille de route

Félicitations ! 🎉

Tu es parti de zéro — sans savoir ce qu'était une variable — et te voilà capable de créer des applications console complètes en Java. Prends un instant pour mesurer le chemin parcouru.

📌 Le plus important

Ta compétence n° 1 n'est pas « connaître Java par cœur » : c'est savoir apprendre en pratiquant — taper du code, lire les erreurs, chercher, corriger, recommencer. C'est ça qui fait les développeurs.

Feuille de route pour continuer

1 · Consolider (1–2 mois)

Recode les mini-projets sans regarder les solutions. Invente tes propres petits programmes. Relève tous les « Défis ».

2 · Approfondir le langage

Interfaces, classes abstraites, enum, records, expressions lambda et l'API Stream.

3 · Sortir de la console

JavaFX (fenêtres), bases de données (SQL + JDBC), puis Spring Boot pour le web.

4 · Devenir un vrai dev

Git/GitHub à fond, tests (JUnit), Maven/Gradle, contribuer à l'open source.

🚀 Le mot de la fin

Programmer, c'est une aventure sans fin — et c'est ce qui la rend passionnante. Tu as maintenant les fondations. Le reste, c'est de la pratique, de la curiosité et de la persévérance.

Bon code, et bienvenue chez les développeurs ! ☕

Apprendre le Java par Jonathan · Édition 2026 · Java 21 LTS

💛

Pour Eleni

Ce cours, chaque ligne de code et chaque encadré…

— par Jonathan