En passant une exception jusqu'à l'appel de la chaîne d'
Espérais pour une explication de ce que signifie passer d'une exception jusqu'à l'appel de la chaîne d'approvisionnement, en déclarant que l'exception dans mes méthodes de lance de la clause et pourquoi je veux le faire.
Voici un exemple de ma compréhension de lancer propre exception.
public class ExceptionThrow {
char[] charArray = new char[] { 'c', 'e', 'a', 'd' };
void checkArray() throws ABException {
for (int i = 0; i < charArray.length; i++) {
switch (charArray[i]) {
case 'a':
throw new ABException();
case 'b':
throw new ABException();//creating the instance of the
//exception anticipated
default:
System.out.println(charArray[i] + " is not A or a B");
}
}
}
public static void main(String[] args) {
ExceptionThrow et = new ExceptionThrow();
try {
et.checkArray();
} catch (ABException ab) {
System.out.println(ab.getMessage() + " An exception did actually occur");
} finally {
System.out.println("This block will always execute");
}
}
}
class ABException extends Exception {
}
Comment pourrais-je passer l'exception de "l'appel de la chaîne d''?
ce qui concerne
Arienne
OriginalL'auteur Arianule | 2011-12-08
Vous devez vous connecter pour publier un commentaire.
La "vocation de la chaîne", également connue comme "la trace de la pile", c'est la liste de tous imbriqués les appels de méthode conduisant à une seule ligne de l'exécution. Dans votre cas, sa profondeur est de 2 :
main
appelscheckArray
, mais il peut y avoir des dizaines de méthodes.Lorsqu'une exception se produit dans le code, il interrompt la méthode actuelle et donne le contrôle de retour à la méthode précédente sur la trace de la pile. Si cette méthode peut gérer l'exception (avec un
catch
), lecatch
sera exécuté, l'exception arrêter la propagation. Sinon, l'exception vont remonter la trace de la pile. En fin de compte, si elle arrive dans lemain
et lamain
ne peut pas le manipuler, le programme s'arrête avec un message d'erreur.Dans votre cas particulier, la
throw new ABException()
crée et renvoie uneABException
qui interrompt lecheckArray
méthode. L'exception est alors pris dans votre main aveccatch(ABException ab)
. Donc d'après votre question, vous pouvez dire que ce code passe l'exception de "l'appel de la chaîne d''.Il y a beaucoup plus de choses à dire, notamment pour ce qui est coché/décoché exceptions. Si vous avez des questions plus précises, n'hésitez pas à demander.
printStackTrace()
méthode, par exempletry { ... } catch (Exception e){ e.printStackTrace(); }
THelper, je ne dis pas que vous avez tort, mais je pense que c'est une mauvaise pratique de l'utilisation de l'e.printStackTrace() dans ces (phénomène de propagation de l'exception). Son correct de l'utiliser pour des tests et des trucs. Parce que cela laisse indésirables trace de la pile dans vos fichiers de log. Surtout si l'exception est gérée par la couche supérieure, pourquoi polluer les journaux avec des traces de pile qui n'a pas de sens dans le contexte actuel.
OriginalL'auteur solendil
Tout d'abord, vous aurez à ajouter
throws ABException
à lamain
méthode, puis supprimer le bloc qui intercepte l'exception ou de la renvoyer après avoir ouvert une sessionOriginalL'auteur Boris Pavlović
Vous pouvez le faire par exemple pour ne pas l'attraper dans
main()
, mais en passant à la pièce de la logique qui a appelémain()
. Dans ce cas, il est trivial, commemain()
est votre point d'entree du programme...Vous pouvez également réécrire votre méthode
Maintenant, il devient de plus en plus clairement comment
checkArray()
"passe à l'exception decheck()
l'appel de la chaîne d'"Peut-être, demander ce dans une autre question...
OriginalL'auteur Lukas Eder