Flux rss
Bookmark Ajouter aux favoris / Partager

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;
	} 
}


Dernière modification le mardi 14 octobre 2008 à 17:40:31.Ce document intitulé « Java - Les exceptions » issu de 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.
Exception in thread "main" java.lang.NoC Bonjour, j ai une erreur "Exception in thread "main"java.lang.NoClassDefFoundError:" et je m en sors pas..Si quelqu un a une idee.. j ai installe Java Runtime Environment mais quand je test des java classes en retour j ai le message d erreur... www.commentcamarche.net/forum/affich-2261404-exception-in-thread-main-java-lang-noc
Win 98 et Java fichier: accés refusé?! Bonjour, Mon Probleme est simple: 1. J'ain creer une application avec java, au demarrage j'accede au disque dur pour lire des fichiers: * SousWin XP: aucun probleme (apres autorisation une seul fois). * Sous Win 98: Exception: java.io.FileNotFound... www.commentcamarche.net/forum/affich-1724722-win-98-et-java-fichier-acces-refuse
Jeux java pour samsung SGH-J600 (Résolu) bonjour a tous, je viens d acheter le samsung SGH-J600 je voudrais savoir si c est possible de mettre des java gratuitement dans mon telephone et si oui comment faire? merci d'avance pour vos reponses. www.commentcamarche.net/forum/affich-3932183-jeux-java-pour-samsung-sgh-j600
[Firefox] plugin Java Jre de SunA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes... www.commentcamarche.net/faq/sujet-1824-firefox-plugin-java-jre-de-sun
Installer Java sous UbuntuPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ... www.commentcamarche.net/faq/sujet-5400-installer-java-sous-ubuntu
Java Runtime MachineJava Runtime Machine Certains sites internet mais aussi certains programmes requièrent la présence de la Java Runtime Machine (JRM) pour exécuter les applets Java. Si vous n'avez pas, ou plus, cette Java Runtime Machine,... www.commentcamarche.net/faq/sujet-640-java-runtime-machine
Samsung sgh u600 et jeux javaBonjour, j ai le portable samsung sgh u600 . je n arrive a ouvrir mes jeux java. refue ouvrir les fichiers pourquoi . aide moi www.commentcamarche.net/forum/affich-3732950-samsung-sgh-u600-et-jeux-java
[Java] Créer une excpetionBonjour, je souhaite créer une exception qui sera levé si le fichier sélectionné par l'utilisateur (dans mon application) ne respecte pas un certain format (exemple : les lignes du fichier doivent respecter un format spécifique). Comment faire ? Que... www.commentcamarche.net/forum/affich-1692185-java-creer-une-excpetion
[Java] Nested ExceptionBonjour, Je travaille en Java et dans mon programme j'ai une commande qui génère une exception. Voici le type de l'exception par exemple : Sending failed; nested exception is: class javax.mail.MessagingException: Could not connect to SMTP host:... www.commentcamarche.net/forum/affich-2220740-java-nested-exception
Télécharger Java Runtime EnvironmentJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces... www.commentcamarche.net/telecharger/telecharger-34055318-java-runtime-environment
Télécharger Cavaj Java DecompilerCavaj Java Decompiler est un éditeur gratuit de code Java. Il permet de recomposer le code source Java d'un fichier CLASS. Il prend en charge la décompilation des applets Java, des archives ZIP et JAR. Le code source Java obtenu est précis. Il intègre... www.commentcamarche.net/telecharger/telecharger-34056787-cavaj-java-decompiler
Télécharger Java ToolsJava Tools est un IDE très léger pour la création, la compilation, l'exécution et le débogage des applications Java et des applettes. L'outil inclus des points et des clics d'accès aux commandes Java, aux documents, au répertoire et aux fichiers. Il... www.commentcamarche.net/telecharger/telecharger-34056297-java-tools
Java - Premier programmePremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main... www.commentcamarche.net/contents/java/javaprem.php3
Java - Les types de donnéesLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et... www.commentcamarche.net/contents/java/javatype.php3
J2EE - Java 2 Enterprise EditionIntroduction au Java Framework Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des... www.commentcamarche.net/contents/j2ee/j2ee-intro.php3