Comment savoir quels exception est levée
Je suis en train de faire un examen de notre base de code, et il y a beaucoup de ce type de déclarations:
try
{
doSomething()
} catch (Exception e)
{
}
mais je voudrais un moyen de savoir quels exception est levée par doSomething() (il n'y a aucune instruction throw dans la mise en œuvre de doSomething) pour que je puisse attraper cette exception au lieu de juste attraper Exception en général, même avec findBugs il donne un avertissement REC_CATCH_EXCEPTION
.
Je dois mentionner que l'enregistrement de l'exception ou de l'impression sur console ne va pas m'aider car il faut du temps, dans ce cas, de reproduire l'erreur qui provoque l'exception ici.
Grâce
OriginalL'auteur Mouna Cheikhna | 2011-09-28
Vous devez vous connecter pour publier un commentaire.
Si il n'y a pas
throws
déclaration dansdoSomething
(par exempledoSomething() throws IOException
), toutes les exceptions qui va se produire sera une instance deRuntimeException
. Si vous voulez connaître précisément la classe de l'exception levée pardoSomething
, vous pouvez toujours essayerSachant que l'exécution des exceptions peuvent être jetés sans exécuter le programme est difficile. Même si rien dans le code qui
doSomething()
appelle explicitement de jeter, de base java opérations peuvent toujours jeterNullPointerException
,ArrayIndexOutOfBoundsException
, etc avec la mauvaise entrée. Voici quelques idées:doSomething
.doSomething
devrait être prêt pour.En tout cas, il est généralement une bonne idée d'attraper les exceptions qui sont aussi précis que possible, car vous ne savez pas exactement ce la cause du problème lorsque vous essayez de traiter tous les cas dans une clause.
Le compilateur java (pas vraiment ecplise lui-même) ne sait qui a vérifié les exceptions (c'est à dire de ne pas le
RuntimeException
expliqué dans ma réponse) sont jetés en regardantthrows
déclarations de méthodes. Si un checked exception est déclaré dans uncatch
bloc, sans qu'il soit levée, vous obtiendrez cette erreur. PS: ceci est un commentaire sur une jolie vieille question, et non pas directement liée à la question d'origine. Vous voulez sans doute poser une nouvelle question à la prochaine fois.OriginalL'auteur tb189
Vous pouvez 1) creuser à travers tout le code dans doSomething() et tout ce qu'elle appelle pour voir la gestion des exceptions et ce RuntimeExceptions peut être levée, ou 2) de prendre de la
catch (Exception e)
et de l'attendre à l'échec. C'est le problème que checked exceptions tenté de surmonter en faisant un typage fort dans la déclaration de signatures de méthode à propos de ce que les exceptions doivent être manipulés comme un résultat de l'appel de la méthode.OriginalL'auteur Ryan Stewart
Si il n'y a pas de
throws
clause, alors la méthode ne jetez pas de vérifié exception. La javadoc de cette méthode peut donner des informations sur toute décoché exceptions, la méthode peut jeter, mais il n'est pas nécessaire.Pourquoi voulez-vous d'attraper toutes les exceptions à la première place?
OriginalL'auteur michael667
Voulez-vous de les attraper juste au moment de la compilation des exceptions ou des exceptions d'exécution ainsi? Si vous voulez prendre le temps de compilation, il suffit de supprimer votre bloc catch - vous obtenez immédiatement des messages d'erreur indiquant que certaines exceptions ne sont pas pris. Après l'ajout d'une exception près, vous verrez des messages d'erreur pour les autres, - vous serez en mesure de terminer la capture de tous les possibles exceptions levées par votre bloc de code.
OriginalL'auteur JW8