Exceptions
Les exceptions standard de JDK
Programmations Orientées Objet - JAVA
Chap 5 : les exceptions
Pr. Laila AMIR
Licence SIR
(Systèmes informatiques Répartis)
Année universitaire 2022/2023
Laila AMIR Programmations Orientées Objet 1 / 27
Exceptions
Les exceptions standard de JDK
Plan
1 Exceptions
Introdution
Exceptions
Les types d’exceptions
Mecanisme des exceptions
Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
2 Les exceptions standard de JDK
Les exceptions standard
Classification des exceptions standard
Laila AMIR Programmations Orientées Objet 2 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Plan
1 Exceptions
Introdution
Exceptions
Les types d’exceptions
Mecanisme des exceptions
Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
2 Les exceptions standard de JDK
Les exceptions standard
Classification des exceptions standard
Laila AMIR Programmations Orientées Objet 3 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Exceptions
Définition
Une exception est un événement exceptionnel qui se produit lors de
l’exécution d’un programme, et qui compromets la poursuite de son
execution (il peut provoquer un fonctionnement anormal).
Exemples d’exceptions :
Débordement de tableau ou de pile,
Division par 0,
Donnees incorrectes (desordre, mauvais type ...),
Resultat inattendu (overflow...),
Lecture d’une donnée erronée ou d’une fin de fichier prématurée
(informations incompletes).
Laila AMIR Programmations Orientées Objet 4 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Les types d’exceptions
Une situation exceptionnelle peut être assimilée à une erreur, c’est à
dire une situation qui est externe à la tâche principale d’un programme.
En Java, on distingue trois types d’erreurs, qui sont de degrés de
gravité différents, à savoir :
Les erreurs graves qui causent généralement l’arrêt du programme
et qui sont représentées par la classe [Link] .
Les erreurs qui doivent généralement être traitées et qui sont
représentées par la classe [Link].
Les erreurs qui peuvent ne pas être traitées et qui sont des objets
de la classe [Link] qui hérite de
[Link].
Toutes ces classes héritent de la classe [Link].
Laila AMIR Programmations Orientées Objet 5 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Mecanisme des exceptions
Comment traiter ces cas exceptionnels ?
Trouver un moyen pour ne pas empêcher ou gêner le
deroulement du programme
Garder la lisibilite du code : la gestion des erreurs ne doit pas
rendre incomprehensible le code (principal) du programme.
Dans les langages modernes : mecanisme des exceptions
Laila AMIR Programmations Orientées Objet 6 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
try/catch
Le langage Java offre un mécanisme très souple pour la gestion des
exceptions. Il utilise des objets pour représenter les exceptions et
l’héritage pour hiérarchiser les différents types d’exception. Ce
mécanisme permet à la fois :
d’isoler la partie du code générant une anomalie du reste du
programme,
de dissocier les opérations de détection et de traitement de cette
anomalie.
Les exceptions sont traitées via des blocs try/catch
(essayer/attraper). On exécute les instructions susceptibles de lever
une exception dans le bloc try et en cas d’erreur ce sont les
instructions du bloc catch qui seront exécutées, pourvu qu’on
attrape bien l’exception levée.
Laila AMIR Programmations Orientées Objet 7 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Comment déclencher une exception avec throw ?
Dans l’exemple, on ne manipule que des
class ErrConst extends
points ayant des coordonnées positifs.
Exception{ }
La classe ErrConst dérive de la classe class Point{
standard Exception. private int x, y ;
public Point(int x, int y)
La présence de throws ErrConst, dans
throws ErrConst {
l’en-tête du constructeur, précise que la if ((x<0) || (y<0))
méthode est susceptible de déclencher throw new ErrConst();
une exception de type ErrConst. this.x = x ; this.y = y ;
Dans le constructeur, et pour une valeur }
négative, on déclenche une exception à public void affiche(){
[Link] (x+””+y);
l’aide de l’instruction throw suivie par un
}
objet de type ErrConst, ce type servira à }
identifier l’exception concernée.
Laila AMIR Programmations Orientées Objet 8 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Throw et throws
Le mot-clé ”Throw” permet de soulever et déclencher une exception, on
lui fournit un objet qui représente une exception.
Le mot-clé ”Throws” s’utilise au niveau de la signature d’une méthode
pour préciser que celle-ci est susceptible de soulever une exception.
Laila AMIR Programmations Orientées Objet 9 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Utilisation d’un gestionnaire d’exception
Pour gérer les éventuelles exceptions de type ErrConst que son emploi
peut déclencher. Il faut :
inclure dans le bloc try les instructions try
dans lesquelles on risque de voir {
déclenchée une telle exception : // instructions
}
faire suivre ce bloc de la définition des catch (ErrConst e)
différents gestionnaires d’exception (ici, {
un seul suffit). Chaque définition de [Link] (”Erreur
gestionnaire est précédée d’un en-tête construction ”) ;
[Link] (-1) ;
introduit par le mot-clé catch.
}
Laila AMIR Programmations Orientées Objet 10 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Programme test
Voici on programme de test dans lequel nous provoquons une exception :
public class Except1{
public static void main (String args[]){
try{
Point a = new Point (1, 4) ; [Link]() ;
Point b = new Point (-3, 5) ; [Link]() ;
} 14
catch (ErrConst e){ Erreur construction
[Link] (”Erreur construction ”);
[Link] (-1) ;
}
}
}
Laila AMIR Programmations Orientées Objet 11 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Remarques
On n’y déclenchait et on n’y traitait qu’un seul type exception ; nous
verrons bientôt comment en gérer plusieurs ;
Le gestionnaire d’exception ne recevait aucune information ; plus
exactement, il recevait un objet sans valeur qu’il ne cherchait pas à
utiliser ; nous verrons comment utiliser cet objet pour communiquer
une information au gestionnaire ;
Nous n’exploitions pas les fonctionnalités de la classe Exception
dont dérive notre classe ErrConst ;
Le gestionnaire d’exception se contentait d’interrompre le
programme ; nous verrons qu’il est possible de poursuivre
l’exécution.
Laila AMIR Programmations Orientées Objet 12 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Transmission d’information au gestionnaire d’exception
On peut transmettre une information au gestionnaire d’exception :
par le biais de l’objet fourni dans l’instruction throw,
par l’intermédiaire du constructeur de l’objet exception.
Laila AMIR Programmations Orientées Objet 13 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Par l’objet fourni à l’instruction throw
Comme nous l’avons vu, l’objet fourni à l’instruction throw sert à
choisir le bon gestionnaire d’exception.
Mais il est aussi à transmettre une information sous la forme d’un
argument
Il suffit pour cela de prévoir les champs appropriés dans la classe
correspondante.
Laila AMIR Programmations Orientées Objet 14 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Dans cet exemple, les champs abs et ord classe ErrConst permettent de
transmettre les coordonnées reçues par le constructeur de Point.
Leurs valeurs sont fixées lors de la construction d’un objet de type
ErrConst.
class Point{
private int x, y ;
public Point(int x, int y) throws ErrConst {
if ((x<0) || (y<0)) throw new ErrConst( x, y) ;
this.x = x ; this.y = y ;
}
public void affiche(){[Link] (”coords : ” + x + ” ” + y);}
}
class ErrConst extends Exception{
public int abs, ord;
ErrConst (int abs, int ord){[Link] = abs ; [Link] = ord;}
}
Laila AMIR Programmations Orientées Objet 15 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
public class Exinfo1{
public static void main (String args[]){
try{
Point a = new Point (1, 4) ; [Link]() ;
Point b = new Point (-3, 5) ; [Link]() ;
}
catch (ErrConst e){
[Link] (”Erreur construction Point”);
[Link] (” coords souhaitees : ” + [Link] + ” ” + [Link]) ;
[Link] (-1) ;
}
}
}
coords : 1 4
Erreur construction Point
coords souhaitees : -3 5
Laila AMIR Programmations Orientées Objet 16 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Par le constructeur de la classe Exception
On peut transmettre un ”message” au gestionnaire, sous forme
d’une information de type chaı̂ne en exploitant le fait que la classe
Exception (dont dérive la classe ErrConst) dispose d’un constructeur à
un argument de type String dont on peut récupérer la valeur à l’aide
de la méthode getMessage (dont héritera ErrConst).
Pour cela, il suffit de prévoir dans la classe ErrConst, un constructeur à un
argument de type String, qu’on retransmettra au constructeur de la
super-classe Exception.
Laila AMIR Programmations Orientées Objet 17 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Par le constructeur de la classe Exception
Voici une adaptation dans ce sens du programme précédent
class Point{
private int x, y ;
public Point(int x, int y) throws ErrConst {
if ((x<0) || (y<0))
throw new ErrConst(”Erreur constr. avec coords ”+ x +” ”+ y);
this.x = x ; this.y = y ;
}
public void affiche(){[Link] (”coords : ” + x + ” ” + y);}
}
class ErrConst extends Exception{
ErrConst (String mes){super(mes) ;}
}
Laila AMIR Programmations Orientées Objet 18 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Par le constructeur de la classe Exception
public class Exinfo2{
public static void main (String args[]){
try{
Point a = new Point (1, 4) ; [Link]() ;
b = new Point (-3, 5) ; [Link]() ;
}
catch (ErrConst e){
[Link] ([Link]());
[Link] (-1) ;
}
}
}
coords : 1 4
Erreur constr. avec coords -3 5
Laila AMIR Programmations Orientées Objet 19 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Gestion de plusieurs exceptions
On peut déclencher et traiter plusieurs exceptions. Voici un exemple deux
types d’exceptions. Nous considérons une classe Point munie :
du constructeur précédent, déclenchant toujours une exception
ErrConst,
d’une méthode deplace qui s’assure que le déplacement ne conduit
pas à une coordonnée négative ; si tel est le cas, elle déclenche une
exception ErrDepl (on crée donc, ici encore, une classe ErrDepl) :
public void deplace (int dx, int dy) throws ErrDepl
{
if ( ((x+dx)<0) || ((y+dy)<0)) throw new ErrDepl();
x += dx ; y += dy ;
}
Laila AMIR Programmations Orientées Objet 20 / 27
Exceptions
Les types d’exceptions
Exceptions Mecanisme des exceptions
Les exceptions standard de JDK Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
Gestion de plusieurs exceptions
Lors de l’utilisation de notre classe Point, nous pouvons détecter les deux
exceptions potentielles ErrConst et ErrDepl :
try{
// bloc dans lequel on souhaite détecter les exceptions ErrConst et ErrDepl
}
catch (ErrConst e){ // gestionnaire de l’exception ErrConst
[Link] (”Erreur construction”) ;
[Link] (-1) ;
}
catch (ErrDepl e) {// gestionnaire de l’exception ErrDepl
[Link] (”Erreur deplacement”) ;
[Link] (-1) ;
}
Laila AMIR Programmations Orientées Objet 21 / 27
Exceptions Les exceptions standard
Les exceptions standard de JDK Classification des exceptions standard
Plan
1 Exceptions
Introdution
Exceptions
Les types d’exceptions
Mecanisme des exceptions
Déclencher et traı̂ter une exception
Transmission d’information au gestionnaire d’exception
Gestion de plusieurs exceptions
2 Les exceptions standard de JDK
Les exceptions standard
Classification des exceptions standard
Laila AMIR Programmations Orientées Objet 22 / 27
Exceptions Les exceptions standard
Les exceptions standard de JDK Classification des exceptions standard
Catégories
Java fournit de nombreuses classes prédéfinies dérivées de la
classe Exception, qui sont utilisées par certaines méthodes standard
; par exemple, la classe IOException et ses dérivées sont utilisées par
les méthodes d’entrées-sorties.
Certaines classes exception sont même utilisées par la machine
virtuelle à la rencontre de situations anormales telles qu’un indice
de tableau hors limites, une taille de tableau négative...
Laila AMIR Programmations Orientées Objet 23 / 27
Exceptions Les exceptions standard
Les exceptions standard de JDK Classification des exceptions standard
Les exceptions standard
Ces exceptions standard se classent en deux catégories :
Les exceptions explicites (on dit aussi sous contrôle) correspondent
à ce que nous venons d’étudier. Elles doivent être traitées par une
méthode, ou bien être mentionnées dans la clause throws.
Les exceptions implicites (ou hors contrôle) n’ont pas à être
mentionnées dans une clause throw et on n’est pas obligé de les
traiter.
Laila AMIR Programmations Orientées Objet 24 / 27
Exceptions Les exceptions standard
Les exceptions standard de JDK Classification des exceptions standard
Classification des exceptions standard
Le JDK contient des classes d’exceptions dont voici un extrait :
Laila AMIR Programmations Orientées Objet 25 / 27
Exceptions Les exceptions standard
Les exceptions standard de JDK Classification des exceptions standard
Exemple 1
String chaine ;
int valeur ;
...
try {
valeur = [Link] (chaine) ;
}
catch (NumberFormatException e){
[Link] (”mauvais format ”) ;
}
try {
a = tab [i] ;
}
catch (ArrayIndexOutOfBoundsException ex){
a=0;
}
Laila AMIR Programmations Orientées Objet 26 / 27
Exceptions Les exceptions standard
Les exceptions standard de JDK Classification des exceptions standard
Exemple 2
Dans cet exemple vu que b était
nulle, le programme va générer
public class Div1 {
une exception lors de l’exécution,
public static int divise (int x, int y)
car une division par zéro vient {
d’avoir lieu. return (x/y);
Le système affiche une exception }
de type : static void main (String [] args) {
[Link]: / int c=0,a=1,b=0;
c= divise(a,b);
by zero. [Link](”res:”+ c);
Une erreur s’est produite lors de }
l’appel de la méthode divise, (la }
division de x/y) ; elle correspond
à une division par zéro.
Laila AMIR Programmations Orientées Objet 27 / 27