Exception

publicité
Programmation Java :
Les exceptions
F. HAMOUDA
1
Plan du Cours
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Gestion traditionnelle des erreurs
Exceptions en JAVA
La gestion des exceptions en JAVA
Remarques sur TestExcep
Exception
Avantages et inconvénients
Syntaxe de try/catch
classe Throwable
classe Exception
classe Error
Déclaration d’une exception
Exécution
Envoi d’une exception ou d’une erreur
Exécution de Excep3
Quelques remarques sur les exceptions
2
Gestion traditionnelle des erreurs
• modèle pour programme C
chaque fonction retourne si ok ou non
gestion à ma main de chaque erreur
à l’endroit où elle se produit. . .
problème supplémentaire : remontée dans le graphe d’appel ?
bugs insolubles si non détection !
• code du programme normal
mélangé avec traitement d’erreur
résultat pas très lisible
3
La gestion des exceptions en JAVA
•
•
•
•
exécution du code normalement
en cas d’erreur, envoie une exception typée
arrêt immédiat du traitement normal !
exécution d’un bloc spécifique de traitement d’erreur
éventuellement hors de la routine !
remontée automatique dans le graphe d’appel
• traitement des erreurs séparé. . .ou absent !
récupération et arrêt du programme
• code plus propre, modèle similaire à C++
4
import java.io.*;
public class TestExcep {
static public void main(String[] args) throws IOException
{
try {
// optimiste, on y va !
FileReader reader = new FileReader(args[0]);
System.out.println(reader.read());
}
catch (FileNotFoundException e) {
System.err.println("fichier pas trouve !");
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("il manque un argument !");
}
}
}
5
shell> java TestExcep Makefile
35
shell> java TestExcep toto
fichier pas trouve !
shell> java TestExcep
il manque un argument !
6
Remarques sur TestExcep
• bloc try pour l’exécution normale
• FileReader peut renvoyer FileNotFoundException
c’est écrit dans la doc !
• .read() peut renvoyer IOException
c’est aussi écrit dans la doc !
• args[0] peut renvoyer ArrayIndexOutOfBoundsException
• si erreur :
exécution du bloc catch englobant le plus proche
associé au type de l’erreur (attention à l’héritage)
7
Exception
•
•
•
•
il s’agit d’une instance d’une classe
elle peut être attrapée dans un bloc try/catch
on peut ajouter de nouvelles exceptions par héritage
IOException FileNotFoundException
Avantages et inconvénients
• très
propre
• gestion explicite des erreurs à un seul niveau
• déclaration des types d’erreur pouvant intervenir
• mais code résultant un peu verbeux
8
Syntaxe de try/catch
try {
// code normal si tout va bien
}
catch (XyzException e) {
// gestion de XyzException
// avec son instance e
}
catch (ZwnException e) {
// une autre exception
// on en met autant qu’on veut...
}
finally { // facultatif
/ / dans tout les cas...
}
9
classe Throwable
• classe mère de toutes les exceptions et erreurs
• méthodes courantes :
– String getMessage();
– String toString();
– void printStackTrace(...);
• étendue par Exception et Error
10
classe Exception
• classe mère de toutes les exceptions
• étend Throwable
• peut être attrapée (catch) (et ses descendantes)
• permet donc d’attraper toutes les exceptions !
• doit être déclarée par les fonctions et méthodes
try {
// ...
}
catch (Exception e) {
// toutes les exceptions sont attrapées
}
11
classe Error
•
•
•
•
classe mère de toutes les erreurs
Étend également Throwable
ne doit pas être attrapée (terminaison du programme !)
pas de déclaration nécessaire pour les fonctions
12
Déclaration d’une exception
• une fonction ou méthode doit déclarer les exceptions
• qu’elle envoie elle-même
• qu’elle laisse passer ( émises par des fonctions appelées et
non gérées en interne)
• nécessaire au mécanisme de try/catch
• avec le mot-clef throws en fin de déclaration
• public void write() throws IOException, ...;
13
import java.io.*;
public class Excep2 {
static void traite(String nom) throws IOException
{
FileReader r = new FileReader(nom);
System.out.println(r.read());
}
static public void main(String[] args) {
try {
traite(args[0]);
}
catch (Exception e) { // attrape tout !
System.err.println("erreur : " + e);
}
}
}
14
Exécution
shell> java Excep2 colore_java.pl
35
shell> java Excep2 rien
erreur : java.io.FileNotFoundException:
rien (No such file or directory)
shell> java Excep2 classes
erreur : java.io.FileNotFoundException:
classes (Is a directory)
shell> java Excep2
erreur : java.lang.ArrayIndexOutOfBoundsException
15
Envoi d’une exception ou d’une erreur
• throw expression ;
• l’expression doit hériter de Throwable
• générallement création de l’exception
throw new Exception("un probleme");
• pour renvoyer une exception
throw e.fillInStackTrace();
compl ète les informations portées par e
16
Exécution de Excep3
shell> java Excep3
4.0
ra = 2.0
shell> java Excep3
-1.0
erreur : PasDeSolution
17
Quelques remarques sur les exceptions
• gestion des exceptions (bloc try ... catch ...)
ou ignorées ! (simple déclaration ... throws ...)
• compilateur très stricte sur les (re-)déclarations
• pour des petits programmes, ajout au main. . .
static public void main(String[] args) throws Exception
{ ...
18
Téléchargement