↑
CHAPITRE 9.1

Concepts essentiels

Comprendre les exceptions en Java
Les exceptions sont des événements qui interrompent l'exécution normale d'un programme. Cette section explique ce qu'est une exception et la différence entre les exceptions vérifiées et non vérifiées.

9.1Concepts essentiels

9.1.1 – DĂ©finition d'une exception

Une exception est un événement qui interrompt l'exécution normale d'un programme. Elle représente une erreur ou une situation exceptionnelle qui se produit pendant l'exécution. Java fournit un mécanisme robuste pour gérer ces exceptions.

🔍 Qu'est-ce qu'une exception ?

Une exception est un objet qui reprĂ©sente une erreur. Quand une exception se produit, Java crĂ©e un objet exception et le "lance" (throw). Si l'exception n'est pas capturĂ©e, le programme s'arrĂȘte.

Exemple : Exceptions courantes

// ArrayIndexOutOfBoundsException : index hors limites
int[] nombres = new int[5];
int valeur = nombres[10];  // ❌ Exception : index 10 n'existe pas (tableau de taille 5)

// NullPointerException : tentative d'utiliser null
String texte = null;
int longueur = texte.length();  // ❌ Exception : texte est null

// ArithmeticException : division par zéro
int resultat = 10 / 0;  // ❌ Exception : division par zĂ©ro

// NumberFormatException : conversion invalide
int nombre = Integer.parseInt("abc");  // ❌ Exception : "abc" n'est pas un nombre

📊 HiĂ©rarchie des exceptions

Toutes les exceptions en Java héritent de la classe Throwable :

  • Throwable : Classe racine
  • Error : Erreurs systĂšme graves (rarement gĂ©rĂ©es)
  • Exception : Exceptions normales (gĂ©rĂ©es)
    • RuntimeException : Exceptions non vĂ©rifiĂ©es
    • Autres Exception : Exceptions vĂ©rifiĂ©es

💡 Pourquoi gĂ©rer les exceptions ?

La gestion des exceptions permet de :

  • Éviter les crashes : EmpĂȘcher le programme de s'arrĂȘter brutalement
  • Informer l'utilisateur : Afficher des messages d'erreur comprĂ©hensibles
  • RĂ©cupĂ©rer : Permettre au programme de continuer aprĂšs une erreur
  • Nettoyer : LibĂ©rer les ressources mĂȘme en cas d'erreur

9.1.2 – Exceptions vĂ©rifiĂ©es et non vĂ©rifiĂ©es

Java distingue deux types d'exceptions : les exceptions vĂ©rifiĂ©es (checked) et les exceptions non vĂ©rifiĂ©es (unchecked). Cette distinction affecte la façon dont elles doivent ĂȘtre gĂ©rĂ©es.

✅ Exceptions vĂ©rifiĂ©es (Checked Exceptions)

Les exceptions vĂ©rifiĂ©es sont des exceptions que le compilateur force Ă  ĂȘtre gĂ©rĂ©es. Elles hĂ©ritent de Exception mais pas de RuntimeException.

  • Obligation : Doivent ĂȘtre gĂ©rĂ©es avec try/catch ou dĂ©clarĂ©es avec throws
  • DĂ©tection : Le compilateur vĂ©rifie qu'elles sont gĂ©rĂ©es
  • Exemples : IOException, FileNotFoundException, SQLException

Exemple : Exception vérifiée

import java.io.FileReader;
import java.io.IOException;

// ❌ ERREUR de compilation si non gĂ©rĂ©e
// FileReader reader = new FileReader("fichier.txt");

// ✅ CORRECT : Gestion avec try/catch
try {
    FileReader reader = new FileReader("fichier.txt");
} catch (IOException e) {
    System.out.println("Erreur : " + e.getMessage());
}

// ✅ CORRECT : DĂ©claration avec throws
public void lireFichier() throws IOException {
    FileReader reader = new FileReader("fichier.txt");
}

⚠ Exceptions non vĂ©rifiĂ©es (Unchecked Exceptions)

Les exceptions non vérifiées sont des exceptions qui ne sont pas vérifiées par le compilateur. Elles héritent de RuntimeException.

  • Pas d'obligation : Ne doivent pas nĂ©cessairement ĂȘtre gĂ©rĂ©es
  • DĂ©tection : Le compilateur ne vĂ©rifie pas leur gestion
  • Exemples : NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

Exemple : Exception non vérifiée

// Pas d'erreur de compilation, mais peut lever une exception à l'exécution
String texte = null;
int longueur = texte.length();  // NullPointerException à l'exécution

// Gestion optionnelle
try {
    int resultat = 10 / 0;  // ArithmeticException
} catch (ArithmeticException e) {
    System.out.println("Division par zéro !");
}

📊 Tableau de comparaison dĂ©taillĂ©

Caractéristique Exceptions vérifiées Exceptions non vérifiées
Héritage Exception (mais pas RuntimeException) RuntimeException
VĂ©rification À la compilation À l'exĂ©cution
Gestion obligatoire Oui (try/catch ou throws) Non (optionnelle)
Cas d'usage Erreurs récupérables (fichiers, réseau) Erreurs de programmation (bugs)
Exemples IOException, SQLException NullPointerException, ArrayIndexOutOfBoundsException

💡 Quand utiliser chaque type ?

  • Exceptions vĂ©rifiĂ©es : Pour des erreurs que le programmeur peut raisonnablement prĂ©voir et gĂ©rer (fichier manquant, connexion rĂ©seau, etc.)
  • Exceptions non vĂ©rifiĂ©es : Pour des erreurs de programmation (bugs) qui indiquent un problĂšme dans le code (null pointer, index invalide, etc.)

💡 Points clĂ©s Ă  retenir

  • Exception vĂ©rifiĂ©e : Doit ĂȘtre gĂ©rĂ©e (try/catch ou throws)
  • Exception non vĂ©rifiĂ©e : Gestion optionnelle
  • RuntimeException : Toutes les exceptions non vĂ©rifiĂ©es en hĂ©ritent
  • Compilateur : VĂ©rifie seulement les exceptions vĂ©rifiĂ©es
  • Bonne pratique : GĂ©rer les exceptions vĂ©rifiĂ©es, corriger les bugs pour les non vĂ©rifiĂ©es