Comment Ca Marche - Communauté informatique  
   
Accueil - Encyclopédie informatiqueTélécharger l'encyclopédieContribuer à cet article

Java - Les exceptions

Java - Les exceptions Encyclopédie


La nécessité de détecter les erreurs

Tout programme comporte des erreurs, même si celui-ci semble fonctionner à merveille. Chaque programmeur essaye de réduire au minimum le nombre d'erreurs, mais toutes les erreurs ne peuvent pas forcément être prévues.

Les erreurs syntaxiques sont la plupart interceptées lors de la compilation, mais il reste souvent des erreurs "imprévisibles".
Ces erreurs se produisent généralement de façon exceptionnelle, c'est-à-dire suite à une action de l'utilisateur, ou de l'environnement. La solution consiste donc dans un premier temps à "prévoir les erreurs imprévisibles" en mettant en place un système de codes d'erreurs, c'est-à-dire un système permettant de retourner des valeurs spécifiques pour signaler un fonctionnement anormal de l'application (souvent -1 ou NULL).

Toutefois cette solution est loin d'être satisfaisante car :

  • elle rend difficile l'écriture de programmes
  • elle rend difficile la lecture du code source, à cause d'une embrication de test conditionnels (if .. else)
  • le code d'erreur retournée peut-être confondue avec la valeur retournée par la fonction... (-1 peut très bien être la valeur de retour d'une fonction)

La notion d'exception

Pour traiter les erreurs, Java propose un mécanisme qualifié d'exception, consistant à effectuer les instructions dans un bloc d'essai (le bloc try) qui surveille les instructions. Lors de l'apparition d'une erreur, celle-ci est lancée dans un bloc de traitement d'erreur (le bloc catch, appelé handler d'exception) sous forme d'un objet appelé Exception.

Le bloc de traitement d'erreur va lever (il s'agit du terme technique, certains diront aussi intercepter) l'exception. Le handler d'exception peut alors traiter l'erreur (en signalant l'erreur par exemple, ou en attendant avant de réessayer, ...) puis lancer à nouveau l'exception vers un bloc de plus haut niveau.

Le mécanisme des exceptions

Il est important de souligner que la transmission des exceptions est d'abord *implicite*. C'est bien évidemment pour cette raison que le concept d'exception est un réel progrès pour l'écriture d'un code facile à lire.

Les exceptions par la pratique

La gestion des exceptions avec Java consiste à définir au sein d'une méthode une clause "try{}" contenant les instructions qui risquent de provoquer une exception et de la faire suivre immédiatement par une clause "catch(){}" contenant comme paramètre l'exception attendue précédée de son type (pour une erreur mathématique ce sera ArithmeticException) et dont le contenu sera une liste d'instruction à exécuter lorsque l'exception se produira.

Voici la syntaxe type d'une classe gérant des exceptions :

class Nom_de_la_classe {
	public static void main(String[] args) {
	// Instructions inoffensives (affectations, ...);
	try {
	// Instructions susceptibles de provoquer des erreurs;
	}
	catch (TypeException e) {
	// Instructions de traitement de l'erreur;
	}
	// Instructions si aucune erreur est apparue;
	} 
}

  • Aucune instruction ne doit se trouver entre le bloc try{} et le bloc catch{}
  • Les blocs try{} et catch{} peuvent chacun contenir plusieurs instructions

Comment les exceptions sont-elles traitées?

Lorsque le programme rencontre une exception dans un bloc try{}, une exception est instanciée puis lancée. L'interpréteur cherche un bloc catch(){} à partir de l'endroit où l'exception a été créée en cherchant vers le bas. S'il ne trouve aucun bloc catch{}, l'exception est lancée dans le bloc de niveau supérieur, ainsi de suite jusqu'au bloc de la classe qui par défaut enverra l'exception au handler de l'interpréteur. Celui-ci émettra alors un message d'alerte standard pour le type d'exception.

Si jamais un bloc catch{} est trouvé, celui-ci gèrera l'exception à sa façon (ou plutôt à la votre) et l'exception ne sera pas envoyée au handler de l'interpréteur.

Si par contre on désire que l'exception soit traité par les blocs de niveaux supérieurs, il suffit d'inclure à la fin de la série d'instructions contenues dans le bloc catch{} une clause throw, suivie du type de l'exception entre parenthèse puis du nom de l'exception (son handle pour utiliser un terme exact). Ainsi l'exception continuera son chemin...

class Nom_de_la_classe {
	public static void main(String[] args) {
	// Instructions inoffensives (affectations, ...);
	try {
	// Instructions susceptibles de provoquer des erreurs;
	}
	catch (TypeException e) {
	// Instructions de traitement de l'erreur;
	throw (TypeException)e;
	}
	// Instructions si aucune erreur est apparue;
	} 
}

Trucs & astuces pertinents trouvés dans la base de connaissances

18/12 20h18 Installation firefox 2.0+java+flash (Logiciel libre)
18/11 00h43 JavaScript c'est la même chose que Java (Mythes et légendes)
07/10 21h20 2 bons livres pour Java et C++ (Langages)
03/10 15h46 Créer une applet qui accède au disque dur (Programmation)
04/09 10h44 plugin Java Jre de Sun (Mozilla Firefox)
15/05 20h49 Gestion des plug-ins (Navigateurs)
10/01 23h04 Stop : KERNEL_MODE_EXCEPTION_NOT_HANDLED (0x1000008E) (Windows)
30/12 22h10 Java Runtime Machine (Navigateurs)
exceptions java Plus d'astuces sur « exceptions java »

Discussions pertinentes trouvées dans le forum

24/05 17h19 java java.lang.nullpointer.exception java erreur "java.lang.NullPointer.Exception Développement 26/05 10h02->mamiemando7
23/08 13h35 java catcher exceptions [Java] catcher plusieurs exceptions Développement 23/08 15h18->HackTrack5
30/07 11h40 java récupér exception java: comment récupér une Exception Développement 31/07 16h01->omar9
15/06 19h19 500 servlet exception java.lang.nullpointerex 500 Servlet Exception java.lang.NullPointerEx Windows 19/06 20h45->SANCO3
01/10 13h20 exception java exception en java Développement 02/10 14h39->agonis573
28/03 14h24 exceptions java Exceptions JAVA... Développement 28/03 14h59->HackTrack1
23/05 16h48 exception java try throws exception en java try / throws Développement 23/05 17h07->gaillardps1
04/05 15h51 java nested exception [Java] Nested Exception Développement 09/05 09h13->HackTrack1
05/06 17h34 exception in thread main java.lang.noc Exception in thread "main" java.lang.NoC Développement 07/06 14h39->Pool Orion1
30/09 10h24 java exception comprise [JAVA] Exception non comprise Développement 30/09 10h24->Didier0
Discussion fermée Problème résolu exceptions java Plus de discussions sur « exceptions java »

Ce document intitulé « Java - Les exceptions » issu de l'encyclopédie informatique Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.