 |
6. GESTION DES ERREURS |
Gestion des erreurs
Les exceptions
* Pour gérer les erreurs: les "exceptions"
* Mécanisme qui permet de séparer
* La détection d'une erreur
* La prise en charge de l'erreur
* Exemple: code de calcul + interface graphique
* Le code de calcul détecte des erreurs
* L'interface graphique est informée
et affiche un message dans une fenêtre
* Permet de conserver une modularité
* Exception = objet qui est créé lorsqu'une erreur survient
Transmission d'une exception
* Mot-clé "throw"
* Au lieu de gérer l'erreur localement,
l'erreur est transmise à la méthode appelante
* On dit qu'une exception est "levée" / "lancée"
* if (erreur) throw new Exception("oops !");
* Interruption de la suite normale du code
* Mot-clé "throws"
* Indique qu'une méthode est susceptible de lever une exception
* Précise la classe de l'exception qui sera levée
* public void lectureFichier() throws IOException
* Plusieurs exceptions: throws IOException,ParseException
* L'objet transmis contient des renseignements sur l'erreur
Création d'une catégorie d'exceptions (1/2)
* Pour pouvoir être transmis,
l'objet doit dériver de "Throwable"
* Classe "Exception"
* Représente des erreurs "normales"
* Il est naturel de vouloir les détecter
* Par exemple: problème de lecture dans un fichier
* Classe "Error"
* Représente des erreurs "anormales"
* Elles ne devraient pas apparaître
* Elles sont signes d'un bug dans le programme
Création d'une catégorie d'exceptions (2/2)
* Création de sa propre classe d'exceptions
* En général, redéfinition de la méthode "getMessage"
* Retourne le message de l'erreur
* D'autres informations peuvent être placées dans l'objet
* Exemple
public class MonException extends Exception {
public String getMessage()
{ return "oops !"; }
}
...
void public maMethode() throws MonException
{ if (erreur) throw new MonException(); }
Détection d'une exception (1/2)
* Pour détecter une exception...
* Il faut surveiller
* Bloc "try" définit une zone de surveillance
* try {
// Code susceptible de lancer une exception
}
* throw ==> suspension de l'exécution normale
* Il faut rattraper et traiter les exceptions
* Bloc "catch" décrit le traitement d'une exception
* catch (IOException e) { /* Gestion exception */ }
* Reprise de l'exécution suspendue par "throw"
* Plusieurs "catch" peuvent se succéder
* Le premier qui correspond au type de l'erreur sera exécuté
* Donc placement des "catch" du plus spécifique au moins spécifique
* catch (MonException e) { ... }
catch (Exception e) { ... }
Détection d'une exception (2/2)
* Obligation de rattraper toutes les exceptions potentielles
* Gestion immédiate: "catch" dans la méthode
* Sinon, transmission à la méthode appelante avec "throw"
* Exemple
public void lectureFichier(String nom) throws IOException
{ /* Lecture des données d'un fichier */ }
public void traitement() {
try {
lectureFichier("mon_fichier.dat");
// Code susceptible de lever un objet "Exception"
}
catch(IOException e)
{ System.out.println("Erreur ouverture fichier !"); }
catch(Exception e)
{ System.out.println("Erreur dans les données !"); }
// Toujours exécuté, même si une exception s'est produite
System.out.println("Fin du traitement");
}
| |
| |
| Copyright (c) 1999-2016 - Bruno Bachelet
- bruno@nawouak.net -
http://www.nawouak.net |
| La permission est accordée de
copier, distribuer et/ou modifier ce document sous les termes de la licence
GNU Free Documentation License, Version 1.1 ou toute version
ultérieure publiée par la fondation Free Software
Foundation. Voir cette licence pour plus de détails (http://www.gnu.org). |
|
|