Classe SDA 7 2025-2026
Anticiper l'Inattendu et Écrire du Code Robuste
Jusqu'à présent, nos programmes fonctionnent bien dans un monde parfait. Mais que se passe-t-il si :
Sans gestion des exceptions, le programme s'arrête brutalement en affichant une erreur rouge dans la console. C'est une mauvaise expérience pour l'utilisateur. La gestion des exceptions est un filet de sécurité qui nous permet d'attraper ces erreurs et de réagir de manière contrôlée.
Vous ne vous attendez pas à avoir un pneu crevé, mais vous avez une roue de secours (bloc catch) au cas où. Le bloc try est le trajet normal, et le bloc finally serait de toujours détacher votre ceinture de sécurité, que le trajet se soit bien passé ou non.
C'est le mécanisme central de la gestion d'erreurs en Java.
On place dans ce bloc le code à risque, celui qui pourrait provoquer une erreur (une "exception").
Ce bloc est le plan de secours. Il ne s'exécute que si une exception du type spécifié se produit dans le bloc try. Il "attrape" l'erreur et exécute un code de gestion.
Ce bloc est toujours exécuté, qu'une erreur se soit produite ou non. C'est l'endroit idéal pour nettoyer les ressources (comme fermer un fichier ou un Scanner), garantissant que cela soit fait quoi qu'il arrive.
InputMismatchException est une erreur courante qui survient lorsque l'utilisateur tape "abc" alors que le programme attendait un nombre.
Lancez-le une fois en entrant 10, puis une autre fois en entrant texte. Vous verrez les différents chemins d'exécution.
Un bloc try peut générer plusieurs types d'erreurs. Vous pouvez chaîner les blocs catch pour réagir différemment à chaque type d'erreur. Les catch sont évalués dans l'ordre, du plus spécifique au plus général.
Pour aller plus loin :
Source: EvoluNoob
Parfois, les exceptions de base de Java ne suffisent pas. Vous pouvez vouloir créer des erreurs spécifiques à la logique de votre application (par exemple, un solde de compte bancaire ne peut pas être négatif).
On crée une classe qui hérite de Exception.
Dans votre code, si une condition d'erreur est remplie, vous utilisez le mot-clé throw new pour "lancer" une instance de votre exception.
Une méthode qui peut lancer une exception "checked" doit le déclarer dans sa signature avec le mot-clé throws.
Résultat :
Créer des exceptions personnalisées rend votre code beaucoup plus lisible et spécifique aux règles de votre domaine (finance, jeux, etc.). Cela facilite également la maintenance et la compréhension du code par d'autres développeurs.
Résultat :
| Pratique | Description |
|---|---|
| Toujours utiliser try-catch | Pour tout code qui pourrait générer une exception |
| Ordonnancer les catch | Du plus spécifique au plus général |
| Utiliser finally | Pour nettoyer les ressources (fichiers, Scanner, etc.) |
| Créer des exceptions personnalisées | Pour les erreurs spécifiques à votre domaine |
| Ne pas ignorer les exceptions | Un bloc catch vide rend le debugging difficile |
La gestion des exceptions ne sert pas à "cacher" les erreurs, mais à les gérer correctement et à permettre au programme de continuer son exécution de manière contrôlée. Un bon programme anticipe les problèmes et y répond de manière élégante.
Mettez en pratique la gestion des exceptions pour rendre vos programmes plus fiables et capables de gérer les situations inattendues.
Écrivez un programme qui demande à l'utilisateur son année de naissance (sous forme de texte) et calcule son âge approximatif en 2025. Le programme doit gérer le cas où l'utilisateur entre du texte qui n'est pas un nombre (ex: "deux mille").
Indice : Placez l'appel à Integer.parseInt() à l'intérieur d'un bloc try et attrapez l'exception NumberFormatException.
Créez une petite calculatrice qui demande deux nombres entiers à l'utilisateur et affiche le résultat de leur division. Votre programme doit gérer deux types d'erreurs :
InputMismatchException).ArithmeticException).Indice : Vous aurez besoin d'un bloc try suivi de deux blocs catch distincts, un pour chaque type d'exception.
Créez une exception personnalisée nommée PasswordTooShortException. Écrivez ensuite une méthode verifierMotDePasse(String mdp) qui lance cette exception si le mot de passe fourni a moins de 8 caractères. Dans votre main, appelez cette méthode dans un bloc try-catch pour tester un mot de passe valide et un mot de passe trop court.
Indice : Votre classe d'exception doit hériter de Exception. Votre méthode utilisera if (mdp.length() < 8) { throw new ... } et devra déclarer throws PasswordTooShortException dans sa signature.