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.
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.
Domaine
Exemples
Applications d'entreprise
Banques, assurances, gros systèmes de gestion
Android
Une grande partie des applications mobiles
Web & Big Data
Serveurs (Spring), Hadoop, Kafka, Elasticsearch
Jeux
Minecraft (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 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).
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 21 → Create.
📖 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 où (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 classMain {
public static voidmain(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ément
Rôle
public
« Accessible de partout » — un niveau de visibilité.
class
Déclare une classe, la « boîte » qui contient ton programme.
Main
Le nom de la classe (= nom du fichier Main.java).
static
Permet de lancer main sans créer d'objet (on verra pourquoi au ch. 13).
void
« Ne renvoie rien ».
main
Le point d'entrée : le programme commence ici.
System.out.println
Affiche 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.1Facile
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 ligneSystem.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 2026double 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 age→Boî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 remplaceint 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
Type
Contient
Exemple
int
Entier
int n = 42;
long
Très grand entier
long p = 9000000000L;
double
Nombre à virgule
double prix = 9.99;
boolean
true / false
boolean ok = true;
char
Un caractère
char c = 'A';
String
Du texte
String 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.1Intermé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érateur
Rôle
Exemple → résultat
+ - *
Addition, soustraction, multiplication
7 * 3 → 21
/
Division
7 / 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
Symbole
Signification
=
Affectation : « range dans » — age = 18;
==
Égalité : « est-il égal ? » — age == 18
!=
Différent : « est-il différent ? »
Les opérateurs logiques
Opérateur
Vrai quand…
Analogie
&& (ET)
les deux sont vrais
majeur ET permis
|| (OU)
au moins un est vrai
carte OU espèces
! (NON)
on inverse
NON connecté
logique.java
int age = 20; boolean aPermis = true;
System.out.println(age >= 18 && aPermis); // trueSystem.out.println(!aPermis); // false
Exercice 6.1Facile
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.
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 ligneSystem.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.1Intermé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");
elseSystem.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).
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.1Intermé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");
elseSystem.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);
}
Partie
Rôle
int i = 1
Initialisation (une seule fois)
i <= 10
Condition (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 ?
Situation
Boucle
Je connais le nombre de tours
for
Je répète tant qu'une condition est vraie (peut-être 0 fois)
while
Je veux exécuter au moins une fois
do while
💡 break & continue
break sort de la boucle immédiatement. continue saute au tour suivant.
Exercice 9.1Intermé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 classMain {
// a et b sont des PARAMÈTRES ; renvoie un intstatic intadditionner(int a, int b) {
return a + b;
}
public static voidmain(String[] args) {
int r = additionner(3, 5); // 3 et 5 = ARGUMENTSSystem.out.println("Somme : " + r); // Somme : 8
}
}
Arguments 3, 5→additionner(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.1Intermédiaire
Consigne : écris estPair(int n) qui renvoie un boolean, puis affiche les nombres pairs de 1 à 20.
Voir la correction
Main.java
static booleanestPair(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 caseSystem.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.1Intermé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éthode
Exemple → 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 = newString("java");
String b = newString("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.1Intermé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 classPersonne {
String prenom; // attributsint age;
// Constructeur (même nom que la classe)Personne(String prenom, int age) {
this.prenom = prenom; // this = l'objet courantthis.age = age;
}
voidsePresenter() {
System.out.println("Je suis " + prenom + ", " + age + " ans.");
}
}
Main.java
Personne p1 = newPersonne("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 classCompteBancaire {
private double solde; // cachépublic doublegetSolde() { return solde; }
public voiddeposer(double montant) {
if (montant > 0) solde += montant; // on vérifie avant
}
}
Exercice 13.1Dé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 classEtudiant {
private double moyenne;
publicEtudiant(double m) { this.moyenne = m; }
public doublegetMoyenne() { return moyenne; }
public booleanestAdmis() { 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 classAnimal {
String nom;
Animal(String nom) { this.nom = nom; }
voidfaireDuBruit() {
System.out.println(nom + " fait un bruit.");
}
}
@Override : redéfinit une méthode héritée (et vérifie les fautes de frappe).
Le polymorphisme
Main.java
Animal[] animaux = { newChien("Rex"), newChat("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.
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.
Pour débuter, concentre-toi sur ArrayList : c'est la collection utilisée dans nos mini-projets et le projet final.
Exercice 15.1Intermédiaire
Consigne : crée une ArrayList<Integer> de nombres et affiche leur somme.
Voir la correction
Main.java
ArrayList<Integer> nb = newArrayList<>();
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
Type
Exemple
Syntaxe
Point-virgule oublié
Compilation
Variable non déclarée
Exécution
Division par zéro, index hors limites
Logique
Le 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.1Dé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 = newFileWriter("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 = newScanner(newFile("taches.txt"))) {
while (lecteur.hasNextLine()) { // tant qu'il reste une ligneSystem.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
Terme
Sens
Dépôt (repo)
Le dossier de projet suivi par Git
Commit
Une « photo » sauvegardée du code, avec un message
Push / Pull
Envoyer 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.
Clique dans la marge à gauche d'une ligne → point rouge.
Lance en mode Debug 🐞 (icône insecte).
Avance pas à pas : F8 (Step Over), F7 (Step Into), F9 (Resume).
Survole une variable pour voir sa valeur en temps réel.
Exercice 20.1Chasse 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 classCalculatrice {
static doublecalculer(double a, double b, int op) {
switch (op) {
case1: return a + b;
case2: return a - b;
case3: return a * b;
case4:
if (b == 0) throw newArithmeticException("Division par zéro");
return a / b;
default: throw newIllegalArgumentException("Opération inconnue");
}
}
public static voidmain(String[] args) {
Scanner sc = newScanner(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 classNombreMystere {
public static voidmain(String[] args) {
Scanner sc = newScanner(System.in);
Random random = newRandom();
boolean rejouer = true;
while (rejouer) {
int secret = random.nextInt(100) + 1; // 1 à 100int 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 ⬇");
elseSystem.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 doublecelsiusVersFahrenheit(double c) { return c * 9 / 5 + 32; }
static doublekmVersMiles(double km) { return km * 0.621371; }
static doubleeurosVersChf(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.
ArrayList<Tache> taches = newArrayList<>();
// Ajouter :
taches.add(newTache("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)staticContactrechercher(ArrayList<Contact> contacts, String nom) {
for (Contact c : contacts)
if (c.getNom().equalsIgnoreCase(nom)) return c;
return null;
}
// Sauvegarde dans un fichiertry (FileWriter w = newFileWriter("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
ArrayList<Depense> depenses = newArrayList<>();
depenses.add(newDepense("Courses", "Alimentation", 85.5));
static doubletotal(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 doubletotalCategorie(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 voidsauvegarder(double revenu, ArrayList<Depense> d) {
try (FileWriter w = newFileWriter("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 encore
En cours
Acquis
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.
Semaine
Chapitres
Projet
Objectif
1
1–3
—
Comprendre Java, installer, « Hello World »
2
4–7
—
Variables, opérateurs, saisie utilisateur
3
8–9
Nombre mystère
Décider et répéter, 1er jeu
4
10–12
Calculatrice, Convertisseur
Méthodes, tableaux, chaînes + Éval 1
5
13–14
—
Classes, héritage, polymorphisme
6
15–16
Gestionnaire de tâches
Collections, exceptions + Éval 2
7
17–20
Gestionnaire de contacts
Fichiers, Git, débogage
8
22
Projet final : Budget
Application 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.
Terme
Définition simple
Algorithme
Suite d'étapes logiques pour résoudre un problème.
Argument
Valeur réelle passée à une méthode lors de l'appel.
Attribut
Donnée d'un objet (ex. le prénom d'une Personne).
Bug
Erreur produisant un comportement inattendu.
Bytecode
Code intermédiaire (.class) exécuté par la JVM.
Classe
Modèle décrivant attributs et méthodes ; sert à créer des objets.
Constructeur
Méthode qui initialise un objet à sa création.
Encapsulation
Cacher les attributs (private) et n'y accéder que par des méthodes.
Exception
Incident à l'exécution, géré par try/catch.
Héritage
Une classe enfant récupère les membres d'une classe parente (extends).
IDE
Logiciel tout-en-un pour programmer (ex. IntelliJ IDEA).
Index
Numéro de position dans un tableau. On compte à partir de 0.
Instance
Autre mot pour « objet ».
JDK
Boîte à outils du développeur (compilateur + JVM + bibliothèques).
JVM
Machine virtuelle qui exécute le bytecode ; assure la portabilité.
Méthode
Bloc d'instructions nommé, appelable ; peut renvoyer une valeur.
Objet
Réalisation concrète d'une classe, créée avec new.
Paramètre
Variable déclarée dans la définition d'une méthode.
Polymorphisme
Traiter des objets de types différents via un type commun.
Référence
« Adresse » qui indique où trouver un objet en mémoire.
Type
Nature d'une valeur (int, double, boolean, String…).
Variable
Espace 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