Académique Documents
Professionnel Documents
Culture Documents
Concepts
• Erreur & Exception
– Erreur: Un erreur logique impossible de réparer (division par
zéro par exemple)
– Exception: un événement imprévu
• Laisser l’exception sans traiter (échec du programme)
• Traiter l’exception (le programme continue après le traitement)
• Traitement d’exception
– Un contrôle de sécurité
• Appel d’une méthode dans de bonnes conditions ?
• Exécution de la méthode, est-ce qu’elle se déroule correctement ?
• …
• Sinon, quelles alternatives, correction ?
– Mécanisme de traitement: général (classe) pour faciliter les
traitements
Échec d’un programme
• Impossibilité pour le système d’accomplir une
tâche
• 2 raisons d’échec
– Erreur logique dans l’implantation (la faute du
programmeur)
– Impossibilité d’obtenir des ressources nécessaires
(e.g. fichier)
• Dans le cas d’erreur, pas réparable (seulement
un message d’erreur)
• Mais pour la second classe: possible de traiter
Ressources nécessaires
• Matériel
• Système d’exploitation
• Fichiers
• Réseau
• Base de données
• Utilisateur (interaction)
Exception
• Apparition d’une situation anormale,
détectable, qui conduit à l’échec du
programme
• Possibilité pour un programme de détecter
et traiter certaines exceptions pour éviter
l’échec du programme
Exemple
public class Lecture_mot {
static BufferedReader input;
ouvrir_fichier("liste_mots");
traiter_fichier();
Si on utilise juste cette
fermer_fichier();
}
ligne, et que "liste_mots"
n’existe pas - une
// ouverture du fichier exception non traitée, le
public static void ouvrir_fichier(String nom) { programme échoue
try {
input = new BufferedReader(
new FileReader(nom));
}
catch (IOException e) {
System.err.println("Impossible d'ouvrir le fichier d'entree.\n" +
Possibilité de traiter
e.toString()); l’exception ici,
System.exit(1); e.g. demander à
} l’utilisateur d’entrer un
} // ouvrir_fichier
autre fichier
Message d’exception
…
catch (IOException e) {
System.err.println("Impossible d'ouvrir le fichier d'entree.\n" +
e.toString());
System.exit(1);
}
Message affiché:
}
Exécution avec catch
• Si aucune exception est générée (thrown), les
instructions dans catch ne sont pas exécutées
• Si une exception est générée, l’exception est comparée
dans l’ordre avec les clauses de catch (ExceptionClass
object)
– Si la classe de l’exception match celle de catch:
• exécution des instruction de ce catch,
• continue après le dernier catch (sauter les autres catches)
– Seulement le premier catch compatible avec l’exception est
exécuté
• Important: Catch d’abord les sous-classes d’exception
– Si aucun catch est compatible avec l’exception,
• l’exception n’est pas attrapée (non traitée)
• transmise à la méthode qui appelle
Checked vs. Unchecked
• Checked exception
– Vérifiée par le compilateur
– Si le programme peut générer une telle exception, il doit
• Soit la traiter dans le programme
• Soit la retransmettre à l’appelant (avec throws dans l’entête)
– Typiquement générée à cause de l’environnement
– Exemple, IOException
– public void getSomeData () throws FileNotFoundException,
SecurityException
• Unchecked exception
– De type RuntimeException ( ou l’une de ses classes filles, diapo 14)
– Problème du programmeur (mauvaise utilisation d’une méthode,
d’un objet, …)
– Le compilateur ne la vérifie pas
– Si un programme peut générer une telle exception, le programme
n’a pas à la signaler dans l’entête
– public int division(înt a, int b) {return a/b; }
Checked vs. Unchecked exception
Lancer une checked exception
• Signaler au compilateur qu’une méthode peut
lancer une exception (non attrapée, non traitée)
public void methode() throws ExceptionClass
• Exemple
public void skip () throws IOException {
String s;
s = input.readLine();
}
• Si une exception apparaît, elle est transmise à l’appelant
(caller)
Traitement partiel d’exceptions
On peut se faire un traitement partiel en faisant un nettoyage ensuite
relancer l’exception à l’appelant.
Exception(String message)
Constructs a new exception with the specified detail message.
Exception(Throwable cause)
Constructs a new exception with the specified cause and a detail
message of (cause==null ? null : cause.toString()) (which typically
contains the class and detail message of cause).
Classe Throwable
• 4 constructeurs
• Thrwoable getCause()
– Cause de cette exception (ou null)
• String getMessage():
– message envoyé par l’exception
• String toString()
– Générer un message décrivant l’exception
• …
Penser Exception comme des
classes / sous-classes
Une TooColdException
est aussi une
TempretureException,
Exception, Throwable