Java essaie de capturer l'utilisation <br /> Bien que le gestionnaire d'exceptions par défaut fourni par le système d'exécution Java soit utile pour le débogage, vous souhaitez généralement gérer vous-même des exceptions. Il y a deux avantages à procéder. Tout d'abord, il vous permet de corriger les erreurs. Deuxièmement, il empêche le programme de terminer automatiquement. La plupart des utilisateurs sont bouleversés (pour dire le moins) concernant l'impression de pistes de pile lorsque le programme se termine et chaque fois qu'une erreur se produit. Heureusement, c'est facile à éviter.
Pour éviter et gérer une erreur d'exécution, il vous suffit de mettre le code que vous souhaitez surveiller dans un bloc d'essai. Suivant le bloc d'essai, y compris une clause Catch qui spécifie le type d'erreur que vous souhaitez attraper. Il est très simple de terminer cette tâche.
Classe exc2 {public static void (String args []) {int d, a; imprimé. ");} catch (arithmeticexception e) {// catch divide-by-zero error System.out.println (" Division par zéro. ");} System.out.println (" After C Atch Statement. ") ; Le programme sortira comme suit:
Division par zéro.Après la déclaration de capture.
Notez que l'appel à println () dans le bloc d'essai n'est jamais exécuté. Une fois l'exception augmentée, le contrôle du programme est transféré du bloc d'essai vers le bloc de capture. L'exécution ne "revient" jamais du bloc de capture au bloc d'essai. Ainsi, «ce ne sera pas imprimé».
Ne sera pas affiché. Une fois l'instruction Catch exécutée, le contrôle du programme se poursuit à partir de la ligne suivante de l'ensemble du mécanisme d'essai / de capture.
Un essai et sa déclaration de capture forment une unité. La portée de la clause Catch est limitée à la déclaration définie avant l'énoncé d'essai. Une déclaration de capture ne peut pas attraper l'exception soulevée par une autre déclaration d'essai (sauf s'il s'agit d'une affaire de déclaration d'essai imbriquée).
Les déclarations protégées par TRY doivent être dans une attelle (c'est-à-dire qu'elles doivent être dans un bloc). Vous ne pouvez pas utiliser d'essai seul.
Le but de construire une clause Catch est de résoudre les exceptions et de continuer à s'exécuter comme si l'erreur ne se produisait pas. Par exemple, dans le programme suivant, chacun pour la boucle est répété pour obtenir deux entiers aléatoires. Ces deux entiers sont divisés respectivement par l'autre partie, et le résultat est utilisé pour diviser 12345. Le résultat final existe dans un. Si une opération de division entraîne une erreur de division zéro, elle sera capturée, la valeur de A est définie sur zéro et le programme continue de s'exécuter.
// Gérez une exception et déplacez. ); {System.out.println ("Division par zéro.");Afficher une description d'exception
Surcharge jetable la méthode toString () (définie par objet), il renvoie donc une chaîne contenant la description de l'exception. Vous pouvez afficher la description de l'exception en passant un paramètre à l'exception dans println (). Par exemple, le bloc de capture du programme précédent peut être réécrit comme
Catch (arithmeticexception e) {System.out.println ("Exception:" + E); Lorsque cette version remplace la version dans le programme d'origine, le programme s'exécute sous l'interprète JavaJDK standard, et chaque erreur est divisée par zéro affiche le message suivant:
Exception: java.lang.arithmeticexception: / par zéro
Bien qu'il n'y ait pas de valeurs spéciales dans le contexte, la possibilité d'afficher une description d'exception est précieuse dans d'autres cas - en particulier lorsque vous expérimentez et déboguez une exception.
Utilisation de l'instruction Java Multiple Catch <br /> Dans certains cas, plusieurs exceptions peuvent être causées par un seul segment de code. Pour gérer cette situation, vous pouvez définir deux ou plusieurs clauses de capture, chacune capture une exception d'un type. Lorsqu'une exception est soulevée, chaque clause Catch est vérifiée en séquence et la première clause correspondant au type d'exception est exécutée. Lorsqu'une instruction Catch est exécutée, d'autres clauses sont contournées et l'exécution continue à partir du code après le bloc Try / Catch. L'exemple suivant conçoit deux types d'exceptions différents:
// démontre plusieurs instructions de capture.classe MultiCatch {public static void main (String args []) {try {int a = args.length; ; Out .println ("Index du tableau OOB:" + E);} System.out.println ("After Try / Catch Blocks.");Le programme s'exécute dans la condition de départ sans paramètres de ligne de commande, ce qui entraîne une exception divisée en zéro car A est 0. Si vous fournissez un paramètre de ligne de commande, il survivra, définissant A sur une valeur supérieure à zéro. Mais cela entraînera l'exception ArrayIndexoutof BoundSexception car le tableau entier C est de 1 longueur et le programme essaie d'attribuer une valeur à C [42].
Voici la sortie du programme en cours d'exécution dans deux situations différentes:
C: /> java multicatcha = 0divide by 0: java.lang.arithmeticexception: / by zero after try / catch blocks.c: /> java multicatch testarga = 1Array index oob: j ava.lang.arrayIndexoutofboundSException après les blocs d'essai / capture.
Lorsque vous utilisez une instruction Multi-Catch, il est important de se rappeler que les sous-classes d'exception doivent être utilisées avant l'une de leurs classes de parents. En effet De cette façon, si la sous-classe est derrière la classe parent, la sous-classe n'arrivera jamais. De plus, le code qui ne peut pas être atteint en Java est une erreur. Par exemple, considérez la procédure suivante:
/ * Ce programme contient une erreur. Une sous-classe doit être avant sa superclasse dans une série d'instructions de capture. Args []) {try {int a = 0; int b = 42 / a;} catch (exception e) {System.out.println ("Exception générique Catch."); RithMeticexception est une sous-classe d'exception.Si vous essayez de compiler le programme, vous recevrez un message d'erreur que la deuxième instruction Catch n'arrivera pas car l'exception a été capturée. Étant donné qu'ArithMeticexception est une sous-classe d'exception, la première instruction Catch gérera toutes les erreurs orientées vers l'exception, y compris ArithMeticexception. Cela signifie que la deuxième instruction Catch ne sera jamais exécutée. Pour modifier le programme, inversez l'ordre des deux instructions Catch.