Gérer les exceptions
15 min · Intermédiaire · 3 octobre 2026
Intercepter une exception
try {
int resultat = 10 / 0;
System.out.println(resultat);
} catch (ArithmeticException e) {
System.out.println("Erreur : " + e.getMessage());
}
System.out.println("Le programme continue normalement"); Sans try/catch, une exception non interceptée arrête l’exécution du programme à cet endroit précis (ou plus exactement, elle remonte la pile d’appels jusqu’à trouver un gestionnaire, sinon le programme se termine).
Lever ses propres exceptions
public static double diviser(double a, double b) {
if (b == 0) {
throw new IllegalArgumentException("Division par zero impossible");
}
return a / b;
}
try {
System.out.println(diviser(10, 0));
} catch (IllegalArgumentException e) {
System.out.println("Erreur : " + e.getMessage());
} Info
throw new IllegalArgumentException("message") crée et lève une exception en une seule instruction. Le catch le plus proche capable de la traiter l’interceptera.
Exceptions vérifiées et non vérifiées
// Exception verifiee (checked) : doit etre geree ou declaree
public static void lireFichier(String chemin) throws java.io.IOException {
// ... code qui peut lever IOException
}
// Exception non verifiee (unchecked) : aucune obligation
public static int diviserEntiers(int a, int b) {
return a / b; // peut lever ArithmeticException, sans obligation de la declarer
} Les exceptions vérifiées héritent de Exception (hors RuntimeException), les non vérifiées héritent de RuntimeException. Le compilateur impose une gestion explicite seulement pour les premières.
Le bloc finally
try {
System.out.println("Tentative...");
throw new RuntimeException("Erreur");
} catch (RuntimeException e) {
System.out.println("Interceptee : " + e.getMessage());
} finally {
System.out.println("Toujours execute, erreur ou non");
} Le bloc finally s’exécute toujours, qu’une exception ait été levée et interceptée ou non, souvent utilisé pour libérer des ressources (fermer un fichier, une connexion).
À toi de jouer
public static int diviserEnSecurite(int a, int b) {
try {
return a / b;
} catch (ArithmeticException e) {
return -1;
}
}
System.out.println(diviserEnSecurite(10, 0));