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