0% ont trouvé ce document utile (0 vote)
5 vues29 pages

Gestion des Exceptions en Java

Ce document traite de la gestion des exceptions en programmation orientée objet, en mettant l'accent sur l'importance de séparer le code normal du traitement des erreurs. Il explique comment créer et gérer des exceptions, y compris des exceptions personnalisées, ainsi que l'utilisation des blocs try, catch et finally. Enfin, il souligne que les exceptions sont essentielles pour maintenir la robustesse des applications en permettant de gérer les erreurs de manière efficace.

Transféré par

abderrahmane belkacemi
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues29 pages

Gestion des Exceptions en Java

Ce document traite de la gestion des exceptions en programmation orientée objet, en mettant l'accent sur l'importance de séparer le code normal du traitement des erreurs. Il explique comment créer et gérer des exceptions, y compris des exceptions personnalisées, ainsi que l'utilisation des blocs try, catch et finally. Enfin, il souligne que les exceptions sont essentielles pour maintenir la robustesse des applications en permettant de gérer les erreurs de manière efficace.

Transféré par

abderrahmane belkacemi
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Ecole Supérieure en Sciences et Technologies de l’informatique et du numérique

Les Exceptions

Cours 2CPI (S4) : Module POO Dr. H. EL BOUHISSI


Introduction
La gestion des erreurs est primordiale dans la robustesse d'une application.
La gestion " traditionnelle " ou à l’ancienne avec des si... ou des Case... est
compliquée et nécessite une suite d’instructions si ... alors ou gestion de cas
: mélange du traitement normal et de la gestion des erreurs.
On constate dans le cycle de développement d'un programme que la gestion
des erreurs nécessitent parfois plus d'effort de programmation que le
fonctionnement normal.
Le programme devient rapidement incompréhensible, car le cas général est
noyé au milieu de la gestion des erreurs. Le code est alors difficile à
maintenir.
DR. H. EL BOUHISSI COURS POO 2
Introduction
La POO dispose d'un gestionnaire d'exceptions permettant de séparer
le code normal du traitement des erreurs.
Les exceptions sont des objets issues de classes avec héritage.
Le programmeur peut créer et déclencher ses propres exceptions.

DR. H. EL BOUHISSI COURS POO 3


Une exception, c’est quoi ?
Une exception est une erreur ou un événement exceptionnel
qui interrompt de flux normal d'exécution d'une application.

C’est une erreur qui se produit pendant l’exécution d’un


programme.
Une exception dans un programme implique généralement son
arrêt d’exécution.

DR. H. EL BOUHISSI COURS POO 4


Une exception, c’est quoi ?
Tous les types d'exception en Java sont de type Throwable.
Throwable se trouve au sommet de la hiérarchie des
exceptions.

Immédiatement en dessous de Throwable se trouvent deux


sous-classes qui divisent les exceptions en Exception et
Errors.

DR. H. EL BOUHISSI COURS POO 5


Comment faire pour poursuivre l’exécution ?

o Repérer les blocs pouvant générer une exception


o Capturer l’exception correspondante
o Afficher un message relatif à cette exception
o Continuer l’exécution

DR. H. EL BOUHISSI COURS POO 6


Exception : exemple
public class Test {
public static void main(String[] args) { Le message Fin de calcul n’a pas été affiché
int x = 5, y = 0;
[Link](x / y); La division par zéro déclenche une
exception ArithmeticException
[Link]("Fin de calcul");
} }

Le message affiché à l’exécution


Exception in thread ”main” [Link] : / by zero
at [Link]( [Link] :4 )

DR. H. EL BOUHISSI COURS POO 7


Comment faire pour capturer une exception ?
Utiliser le bloc try { ... } catch { ... }

o Le try { ... } pour entourer une instruction susceptible de


déclencher une exception.

o Le catch { ... } pour capturer l’exception et afficher un message qui


lui correspond.

DR. H. EL BOUHISSI COURS POO 8


Exception : exemple
public class Test {
public static void main(String[] args) {
int x = 5, y = 0; Le message affiché à l’exécution
try {
[Link](x / y); Exception : Division par zéro
} Fin de calcul
catch (ArithmeticException e) { Constatation
[Link]("Exception : Division par zéro");
Explication :
}
L’exception a été capturée
[Link]("Fin de calcul"); Le message Fin de calcul a été affiché
} }

DR. H. EL BOUHISSI COURS POO 9


Et si le type d’exception n’est pas connu ?
public class Test2 {
public static void main(String[] args) {
int x = 5, y = 0;
try { Le même message sera affiché :
[Link](x / y); Exception : Division par zéro
} Fin de calcul
catch (Exception e) { Constatation
[Link]("Exception : Division par zéro "); La classe Exception peut être utilisée
}
[Link]("Fin de calcul");
} }

DR. H. EL BOUHISSI COURS POO 10


Quelques méthodes de la classe Exception

 String getMessage() : retourne un message d’erreur succinct

 String toString() : retourne un message d’erreur détaillé

 void printStackTrace() : affiche la pile complète d’exécution menant

à l’exception.

DR. H. EL BOUHISSI COURS POO 11


Quelques méthodes de la classe Exception
public class Test3 {
public static void main(String[] args) {
int x = 5, y = 0;
try {
[Link](x / y);
}
Le même message sera affiché :
catch (Exception e) {
[Link]("Exception : " + [Link]());
Exception : / by zero
} Fin de calcul
[Link]("Fin de calcul");
} }

DR. H. EL BOUHISSI COURS POO 12


Quelques méthodes de la classe Exception
public class Test4 {
public static void main(String[] args) {
int x = 5, y = 0;
try {
Le message affiché est :
[Link](x / y);
}
catch (Exception e) { [Link](); [Link] : / by zero
} at [Link]([Link])
[Link]("Fin de calcul"); Fin de calcul
}}

DR. H. EL BOUHISSI COURS POO 13


Quelques méthodes de la classe Exception
public class Test5 {
public static void main(String[] args) {
int x = 5, y = 0;
try {
[Link](x / y); Le même message sera affiché :
}
Exception : [Link]:
catch (Exception e) {
/ by zero
[Link]("Exception : " + e. toString());
Fin de calcul
}
[Link]("Fin de calcul");
} }

DR. H. EL BOUHISSI COURS POO 14


Récapitulons !
On a utilisé (ou vu) des exceptions prédéfinies :
o Exception
o ArithmeticException

On peut aussi définir nos exceptions personnalisées !!!!!!!!!!!!!

DR. H. EL BOUHISSI COURS POO 15


Exceptions personnalisées
public class Adresse {
private String rue;
private String ville;
private String codePostal;
public Adresse(String rue, String codePostal, String ville) {
[Link] = rue;
[Link] = ville;
[Link] = codePostal;
}
// ............... Plus de codes !!!!
}
Nous supposons que le champ codePostal doit contenir exactement 5 chiffres

DR. H. EL BOUHISSI COURS POO 16


Exceptions personnalisées : démarche à suivre (1)
o Etape 1 : Créer notre propre exception (qui doit étendre la classe Exception)
o Etape 2 : Dans le constructeur de Adresse, on lance une exception si l’attribut
codePostal ne contient pas 5 chiffres

Étape 1 : Créons l’exception IncorrectCodePostalException dans un package cours17052021

public class IncorrectCodePostalException extends Exception {


// le constructeur de cette nouvelle exception
public IncorrectCodePostalException(){
[Link]("Le code postal doit contenir exactement 5 chiffres");
}} Si la classe d’erreur existe déjà, il faut lire sa
documentation avant de l’appeler !!!!!!!!

DR. H. EL BOUHISSI COURS POO 17


Exceptions personnalisées : démarche à suivre (2)
Etape 2 : Modifier le constructeur de la classe Adresse
public class Adresse {
// après les attributs
public Adresse(String rue, String ville, String codePostal) throws IncorrectCodePostalException {
if ([Link]() != 5) throw new IncorrectCodePostalException();
[Link] = rue;
[Link] = ville;
[Link] = codePostal;
}}
// il faut faire pareil dans setCodePostal()

DR. H. EL BOUHISSI COURS POO 18


Exceptions personnalisées : démarche à suivre (3)
public static void main(String[] args) {
Adresse a ;
try {
a = new Adresse ("Sidi Ahmed", "Bejaia", "06");
}
catch(IncorrectCodePostalException e) { [Link]();
} }
Le message affiché à l’écran est :
Le code postal doit contenir exactement 5 chiffres
[Link] at
[Link].<init>([Link]) at
[Link]([Link])
DR. H. EL BOUHISSI COURS POO 19
Exemple avec deux conditions (1)
On peut rajouter une deuxième :condition
codePostal doit contenir exactement 5 chiffres et la rue doit être une chaîne en
majuscule
Étape 1 : Créons l’exception IncorrectRueException dans un package cours17052021

public class IncorrectRueException extends Exception {


// le constructeur de cette nouvelle exception
public IncorrectRueException(){
[Link]("La rue doit être une chaine en majuscule");
}}

DR. H. EL BOUHISSI COURS POO 20


Exemple avec deux conditions (2)
public class Adresse2 {
// après les attributs
public Adresse2(String rue, String ville, String codePostal) throws IncorrectCodePostalException
, IncorrectRueException {
if ([Link]() != 5) throw new IncorrectCodePostalException();
if(![Link]([Link]())) throw new IncorrectRueException();
[Link] = rue;
[Link] = ville;
[Link] = codePostal;
}} Chaque condition doit être traitée
individuellement, car le throw n’est pas le même

DR. H. EL BOUHISSI COURS POO 21


Exemple avec deux conditions (3)
public static void main(String[] args) {
try {
Adresse2 a = new Adresse2 (« sidi ahmed ", " Bejaia", "06");
}
catch(IncorrectCodePostalException e1) {
[Link]();
}
catch(IncorrectRueException e2) {
[Link](); Un try peut avoir plusieurs catch
}}

DR. H. EL BOUHISSI COURS POO 22


Afficher les valeurs qui ont déclenché l’exception dans le message ?
Modifier la première exception : IncorrectCodePostalException
public class IncorrectCodePostalException extends Exception {
public IncorrectCodePostalException(String cp){
[Link]("Le code postal ’" + cp + "doit contenir exactement 5 chiffres");
}}

Modifier la deuxième exception : IncorrectRueException


public class IncorrectRueException extends Exception {
public IncorrectRuexception(String rue) {
[Link]("Le nom de la rue ’" + rue + "doit être en majuscule");
}}

DR. H. EL BOUHISSI COURS POO 23


Afficher les valeurs qui ont déclenché l’exception dans le message ?
Modifier le constructeur de la classe Adresse
public class Adresse {
// apr`es les attributs
public Adresse(String rue, String ville, String codePostal) throws IncorrectCodePostalException ,
IncorrectRueException {
if ([Link]()!=5) throw new IncorrectCodePostalException(codePostal);
if(![Link]([Link]())) throw new IncorrectRueException(rue);
[Link] = rue;
[Link] = ville;
[Link] = codePostal;
} }

DR. H. EL BOUHISSI COURS POO 24


Afficher les valeurs qui ont déclenché l’exception dans le message ?
public static void main(String[] args) {
try {
Adresse a = new Adresse ("Sidi Ahmed", "Bejaia", "06");
}
catch(IncorrectCodePostalException | IncorrectStreetNameException e) {
[Link]();
}}

Le message affiché est :


Le code postal " 06" doit contenir exactement 5 chiffres

DR. H. EL BOUHISSI COURS POO 25


Exécution
public static void main(String[] args) {
Adresse a ;
try {
a = new Adresse (""" Bejaia", "06");
}
catch (AdresseException e) {
[Link]();
}}

Le message affiché est :


Le code postal "1300" doit contenir exactement 5 chiffres.
Le nom de la rue ’Sidi Ahmed’ doit être en [Link] at
[Link](.<init>([Link]) at [Link]( ([Link])

DR. H. EL BOUHISSI COURS POO 26


Mécanisme try-catch-finally, mot-clé finally
A utiliser quand on veut exécuter une instruction qu’une exception soit levée ou non
public class Test6 {
public static void main(String[] args) {
int x = 5, y = 0; Le bloc finally peut s’avérer intéressant si le
try { catch contient un return qui forcera l’arrêt de
[Link](x / y); l’exécution du code.
}
catch (Exception e) {
[Link]("Division par zéro"); Malgré cela, ce bloc (finally) sera exécuté.
}
finally{
[Link]("Instruction exécutée
systématiquement");
}}}

DR. H. EL BOUHISSI COURS POO 27


Exception en pascal !!!!
Program ExceptionSamples;
{$MODE DELPHI}
Uses SysUtils;
Var x,y : integer; z:real;
BEGIN
Try
writeln('valeur de x ');
La compilation en mode FPC ne
read(x); supporte pas les exceptions, il faut
writeln('valeur de y ');
read(y);
ajouter {$MODE DELPHI} sous la
z:=x/y; déclaration du programme
writeln(z:2:2);
Except
On E:exception do WriteLn('erreur !!! Division par 0');
End;
readln; readln;
END.

DR. H. EL BOUHISSI COURS POO 28


Conclusion
•Dans tous les programmes, des erreurs peuvent survenir. Les
exceptions servent à réparer ces erreurs.

•Les exceptions sont lancées grâce au mot-clé throw, placé dans un


bloc try, et rattrapées par un bloc catch.

•La bibliothèque standard propose la classe exception comme base


pour créer ses exceptions personnalisées.

DR. H. EL BOUHISSI COURS POO 29

Vous aimerez peut-être aussi