Chapitre 6: Les exceptions Traitement des exceptions (1)

09/06/2014
1
Chapitre 6: Les exceptions
Décrire les actions à faire lorsqu'un événement inattendu survient
(appel incorrect d'une méthode, ouvrir un fichier inexistant, ...)
Il
y
a
des
classes
prédéfinies
qui
indiquent
types
d
'
exceptions
Il
y
a
des
classes
prédéfinies
qui
indiquent
types
dexceptions
possibles: Exception (classe mère:toute exception), IOException
(exception d'E/S), ArithmeticException (division par 0, ...), ...etc.
Exemple:
public class TraiterArguments {
public static void main(String [] args){
int S=0; for (int i=0; i<args.length; i++)
S=S+Intege
r
.parseInt( args[ i ] );
System.out.println("Somme= " + S); } }
L'exécution: C:\TP_JAVA> java TraiterArguments 23 Trois 34 8
Exception in thread "main" java.lang.NumberFormatException: .....
96
POO \ N.EL FADDOULI 96
Erreur
Traitement des exceptions (1)
Traitement des exceptions en deux étapes:
Détecter (découvrir) l'exception
Résoudre
(traiter)
l
'
exception
Résoudre
(traiter)
lexception
Utilisation des clauses try et catch
Exemple:
import java.lang.*;
public class TraiterArguments {
public static void main(String [] args) {int S=0;
try
{
for
(
int
i=
0
;
i
<
args
length
;
i++)
S
=
S
+
Integer
parseInt
(
args
[
i
]
)
;
}
try
{
for
(
int
i=
0
;
i
<
args
.
length
;
i++)
S
=
S
+
Integer
.
parseInt
(
args
[
i
]
)
;
}
catch( NumberFormatException e)
{System.err.println ("L'un des argument n'est pas un entier"); }
System.out.println("Somme = " + S); }}
Quel est le résultat de: C:\TP_JAVA> java TestArguments 5 7 ab 9
97
POO \ N.EL FADDOULI 97
09/06/2014
2
Traitement des exceptions (2)
Utilisation des clauses try et catch sur des parties réduites de codes.
Exemple: Utiliser try-catch à l'intérieur de la boucle for pour rejeter les
arguments
en
ligne
qui
ne
sont
pas
des
entiers
arguments
en
ligne
qui
ne
sont
pas
des
entiers
.
public class TraiterArguments {
public static void main(String [] args) { int S=0;
for (int i=0; i<args.length; i++)
try { S = S + Integer.ParseInt(args[ i ] ); }
catch(
NumberFormatException
e
)
catch(
NumberFormatException
e
)
{System.err.println ("L'élément "+ args[ i ]+ " a été ignoré"); }
System.out.println("Somme = " + S); } }
Quel est le résultat de:C:\TP_JAVA> java TestArguments 5 7 ab 9h3.5 4
98
POO \ N.EL FADDOULI 98
Utilisation de plusieurs clauses catch (1)
Possibilité d'avoir plusieurs clauses catch après le bloc try.
Chacun gère un type d'exception différent.
Syntaxe:
try { ...... // code pouvant générer plusieurs exceptions
}
catch(exception1 e1){// code exécuté s'il y a une exception de type exception1
..... }
catch(exception2 e2){// code exécuté s'il y a une exception de type exception2
..... }
catch(exception3 e3){
// code exécuté s'il y a une exception de type exception3
..... }
99
POO \ N.EL FADDOULI 99
09/06/2014
3
Utilisation de plusieurs clauses catch (2)
Exemple:
try { ...... // code pouvant générer plusieurs exceptions
}
catch(NumberFormatException e1)
{System.out.println( "Erreur de conversion:") ;}
catch(ArrayIndexOutOfBoundsException e2)
{ System.out.println( e2.getMessage());}
catch(ArithmeticException e3)
{System.out.println( "Erreur mathématique:" +
e3.getMessage());}
100
POO \ N.EL FADDOULI 100
Lecture de données
Utilisation des deux classes prédéfinies InputStreamReader et
BufferedReader comme suit:
import java io
*
;
import
java
.
io
.
;
......
String S;
try { InputStreamReader lecteur = new InputStreamReader(System.in);
BufferedReader entree = new BufferedReader(lecteur);
S = entree.readLine( );
}
catch(IOException err){ System.out.println(err.getMessage());
System.exit(-1); }
System.out.println(S); // traiter S: l'afficher, la convertir, ...S
101
POO \ N.EL FADDOULI 101
09/06/2014
4
Lecture de données
Exemple: Classe permettant de lire des entiers et des réels
import java.io.*;
public class
Lire
public
class
Lire
{ public static String Chaine()
{ String S;
InputStreamReader L = new InputStreamReader(System.in);
BufferedReader E = new BufferedReader(L);
try { S = E.readLine( );
}
catch(IOException err){ S ="";}
return (S);
}
102
POO \ N.EL FADDOULI 102
Lecture de données
(suite)
public static int Entier() { return Integer.parseInt (chaine()) ; }
public static double Reeld() { return Double parseDouble (chaine()) ; }
public
static
double
Reeld()
{
return
Double
.
parseDouble
(chaine())
;
}
public static float Reels(){ return Float.parseFloat (chaine()) ;}
}
Test de cette classe dans la méthode main:
int i; double d; float f; String s;
iLiEti()
i
=
Li
re.
E
n
ti
er
(
)
;
d = Lire.Reeld( );
f = Lire.Reels( );
s = Lire.chaine( );
........
103
POO \ N.EL FADDOULI 103
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !