Vous êtes sur la page 1sur 8

2009

JavaLesExceptions

ILHEMBOUSSAD
USTHB

26/02/2009

UNIVERSITEDESSCIENCESETDELATECHNOLOGIEHOUARIBOUMEDIENE(USTHB) PROGRAMMATIONORIENTEEOBJETJAVA ILHEMBOUSSAD

ANNEE20082009

1 EXCEPTION
Une exception est un vnement qui se manifeste au cours de l'excution d'un programme et qui va perturber le droulement normal des instructions. Elle peut se produire parce que le programme rencontre une erreur ou un vnement anormal. L'erreur peut tre technique (par exemple un fichier attendu n'est pas prsent) ou mtier (par exemple un processus est lanc avec des arguments invalides). Le principe repose sur l'obligation de prvoir un traitement d'erreur sur les instructions susceptibles de les provoquer. Pour ce faire, il sera ncessaire d'isoler les instructions susceptibles de provoquer des exceptions dans un bloc d'instructions, dit "bloc de try" qui sera suivi de blocs d'instructions, appels "blocs de catch", dans lesquels seront cods les diffrents traitements des diffrentes exceptions.
Exemple :
instructions; try { // Dbut de l'essai instruction1; instruction2; // etc } catch( MonException e) { // Traitement de l'exception e }

Les exceptions en Java instructions try catch pour capturer lexception mot-cl throws pour transfrer lexception au code appelant instruction throw pour lever une exception

1.1

LE BLOC TRY
Toute instruction susceptible de provoquer une erreur devra tre contenu dans un bloc d'instructions de ce type. Ce bloc d'instructions peut contenir autant d'instructions que l'on souhaite, susceptibles ou non de gnrer des exceptions.

UNIVERSITEDESSCIENCESETDELATECHNOLOGIEHOUARIBOUMEDIENE(USTHB) PROGRAMMATIONORIENTEEOBJETJAVA ILHEMBOUSSAD

ANNEE20082009

1.2 LES BLOCS DE CATCH


Ils contiennent les diffrents traitements pour chaque exception. On a autant de catch que de types d'exceptions. On parle de types d'exceptions, en effet, chaque exception est un objet, transmis par l'instruction qui l'a gnre. On distinguera les diffrents types des exceptions en fonction des classes auxquelles elles appartiennent. Ainsi donc, le bloc de catch reoit en argument un objet qui reprsente l'exception (dans notre exemple, le nom de la variable contenant l'exception est e et il est de type MonException). Cet objet contiendra les informations exploitables pour traiter l'erreur. Remarque : Pour savoir si une mthode d'un objet est susceptible d'mettre des exceptions, il suffit de consulter la documentation des classes. Chaque mthode signale toutes les exceptions qu'elle renvoie.

1.3 LE BLOC FINALLY


Ce bloc, qui est facultatif, se met aprs le dernier catch. Les instructions qu'il encadre vont tre excutes qu'il y ait ou non une exception. A la diffrence des instructions places la suite des catch, si une instruction return est excute dans un des blocs de catch, le code contenu dans le bloc finally sera quand mme excut avant le retour vers l'appelant. Son usage servira principalement remettre en tat la cohrence du traitement en cas d'exception. Par exemple, refermer les fichiers utiliss lors des traitements dans le try.

1.4 LA DECLARATION THROWS DANS LA SIGNATURE DE LA METHODE


Les mthodes d'un objet qui sont susceptibles d'envoyer une exception doivent le dclarer dans leur signature avec le mot cl throws (avec un s la fin : verbe la 3eme personne du singulier en anglais). C'est ce qui va permettre au compilateur de savoir que, lorsqu'on appel cette mthode, il faut ncessairement le faire dans un try, et que la (ou les) exception(s) signales par cette clause doivent tre "catchs". Une mthode dclare, par le mot-cl throws, dans sa signature les classes d'exception qu'elle peut envoyer.
2

UNIVERSITEDESSCIENCESETDELATECHNOLOGIEHOUARIBOUMEDIENE(USTHB) PROGRAMMATIONORIENTEEOBJETJAVA ILHEMBOUSSAD

ANNEE20082009

les exceptions listes sont propages/transmises la mthode appelante si elles sont leves dans le corps de la mthode traite. Donc une exception peut tre propage jusqu' une mthode appelante qui la capture et la traite. uneMthode() throws ClasseException {

1.5 LINSTRUCTION THROW POUR DECLENCHER LEXCEPTION


En cas derreur, quitte brutalement le traitement en cours dans lappel Retourne lappelant dans le "catch" correspondant En cas de problme remonter, l'envoi d'une exception se fait avec l'instruction throw (sans s : il est l'impratif). Il est suivi par l'objet exception, qui est gnralement cr ce moment l. Pour indiquer qu'une exception s'est produite, on lance ou on lve une exception. En Java, il s'agit tout simplement d'une instruction qui consiste instancier une classe d'exception prcd du mot cl throw throw new ClasseException(); Il appartient videmment au programmeur de dcider quand il veut lancer une exception.

1.6 LA CLASSE DEXCEPTION


Elle doit hriter de Exception Une classe d'exception possde normalement deux constructeurs : o le constructeur par dfaut o un constructeur avec un argument String: Le message. L'ide est que dans le premier cas, on ait un message d'exception prdfini et dans le second cas le message pass travers la chane de caractres. Une mthode public pour rcuprer le message: getMessage() Elle comporte les attributs et les mthodes ncessaires son traitement Remarque : Il est conseill de toujours donner aux classes d'exceptions un nom qui se termine par Exception, afin de pouvoir identifier toute classe ddie ce type de travail.

UNIVERSITEDESSCIENCESETDELATECHNOLOGIEHOUARIBOUMEDIENE(USTHB) PROGRAMMATIONORIENTEEOBJETJAVA ILHEMBOUSSAD

ANNEE20082009

Chaque exception est un objet objet construit lors dun incident (instruction de construction, constructeurs) Hirarchie de classes dexception (pour un traitement group de plusieurs exceptions) Les exceptions cres la main doivent hriter dune classe dexceptions existante (exemple : Exception)

1.6.1 Hirarchie des classes dexceptions


Comme Java est un langage orient objet, une exception sera un objet.

A la racine de cet arbre, on trouve la classe Throwable, qui a 2 sous-classes :

Tout d'abord la classe Error, qui correspond des erreurs assez srieuses qui ont peu de chance d'tre rcupres par une application classique, comme lorsque la VM est court de mmoire par exemple. Nous nous intresserons plutt la sous-classe Exception

1.6.2 Mthodes des classes d'exceptions


Plusieurs mthodes des classes d'exceptions permettent de retourner des informations relatives l'erreur en cours. Il s'agt de :

getMessage() : retourne une chane de caractres reprsentant le message relatif l'exception, toString() : retourne une courte description de l'exception. Si cette dernire a t cre avec un message d'erreur, le rsultat serait la concatnation du nom de la classe, d'un deux-points suivi d'un espace et d'une chane de caractres provenant de getMessage(),
4

UNIVERSITEDESSCIENCESETDELATECHNOLOGIEHOUARIBOUMEDIENE(USTHB) PROGRAMMATIONORIENTEEOBJETJAVA ILHEMBOUSSAD

ANNEE20082009

printStackTrace() : retourne la trace de la pile au flux de sortie standard qui est la valeur du champ System.err. La premire ligne de sortie contient le rsultat produit par toString(). Les autres lignes reprsente les donnes au pralable enregistres par la mthode fillInStackTrace(). fillInStackTrace() : Cette mthode enregistre les informations de l'exception courant propos de l'tat courant des piles pour le thread courant.

1.7 PILE DES EXCEPTIONS


Les exceptions peuvent donc tre propages au travers des diffrents appelants. C'est ce que l'on appelle la pile d'appels, qu'il est possible de l'afficher, ce qui permet aussi d'identifier l'endroit dans le programme d'o provient l'exception. Affiche sur la sortie derreur standard (System.err) Possibilit denvoyer nos propres exceptions Contient lhistorique de propagation des exceptions Rcupration possible de la pile Mthodes getStackTrace et setStackTrace Personnalisation de l affichage

UNIVERSITEDESSCIENCESETDELATECHNOLOGIEHOUARIBOUMEDIENE(USTHB) PROGRAMMATIONORIENTEEOBJETJAVA ILHEMBOUSSAD

ANNEE20082009

EXEMPLES
Crer une classe simple dexception Crer une classe avec une mthode f() qui lve lexception et la mthode main qui traite lexception. class ExceptionSimple extends Exception {} public class DemoExceptionSimple { public void f( ) throws ExceptionSimple { System.out.println(" On lve ExceptionSimple dans f()"); throw new ExceptionSimple (); } public static void main(String[] args) { DemoExceptionSimple des = new DemoExceptionSimple (); try { des.f(); } catch(ExceptionSimple e) { System.err.println(" Exception capture ! "); } } }

Exemple 1

Exemple 2 Les classes dexception fournies par Java comportent toujours 2 constructeurs : sans paramtre avec un paramtre de type String pour transmettre un message afficher lorsque lexception est leve

Crer une classe dexception avec les 2 constructeurs Crer une classe avec deux mthodes f() et g() qui lvent cette exception des 2 manires Capturer les exceptions leves par f() et g() dans la mthode main(...)en affichant la pile des appels

UNIVERSITEDESSCIENCESETDELATECHNOLOGIEHOUARIBOUMEDIENE(USTHB) PROGRAMMATIONORIENTEEOBJETJAVA ILHEMBOUSSAD

ANNEE20082009

QUELQUES EXCEPTIONS PREDEFINIES

Voici quelques exceptions prdfinies dans Java : NullPointerException : accs un champ ou appel de mthode non statique sur un objet valant null. Utilisation de length ou accs une case dun tableau valant null. ArrayIndexOutOfBoundsException : accs une case inexistante dans un tableau. ArrayIndexOutOfBoundsException : accs au ime caractre dune chane de caractres de taille infrieure i. ArrayIndexOutOfBoundsException : cration dun tableau de taille ngative. NumberFormatException : erreur lors de la conversion dune chane de caractres en nombre.

Vous aimerez peut-être aussi