Java exécuter le code uniquement si aucune exception n'est levée dans le try et catch block?
Comment puis-je faire en sorte que le code ne s'exécute que si il n'y a aucune exception n'est levée?
Avec enfin l'exécution de code si il y a une exception ou pas.
try {
//do something
} catch (Exception e) {}
//do something only if nothing was thrown
Pourquoi ne pas le mettre dans le
try
bloc ci-dessous l'exception lancer l'appel?OriginalL'auteur Muhammad Umer | 2015-05-03
Vous devez vous connecter pour publier un commentaire.
Voici deux façons:
Ou si vous voulez que votre deuxième bloc de code à l'extérieur de la
try
bloc:Vous pouvez également mettre le
if
déclaration dans unfinally
bloc, mais il n'y a pas assez d'informations dans votre question, à savoir si ce serait préférable ou non.aucun avantage" -- Cela dépend du cas d'utilisation. Il y a des situations où vous souhaitez que la deuxième tâche qui doit être exécutée à l'extérieur de la
try
bloc au lieu de l'intérieur. Vous ne pourriez pas vouloir exécutions à partir de la deuxième bloc pour être traitées de la même manière que les exceptions dans le premier bloc.OriginalL'auteur khelwood
Dans cet exemple,
doSomething2()
ne sera exécutée que si aucune exception n'est levée pardoSomething()
.Si une exception est levée par
doSomething()
,doSomething2();
sera ignorée et l'exécution saute àdoSomething3();
Noter également,
doSomething3()
sera exécuté s'il existe une exception levée pardoSomething2();
Si aucune exception n'est levée,
doSomething3();
ne sera pas exécuté.doSomething2
déclenche une exception? Je ne veux pas qu'il soit attrapé.Si vous voulez
doSomething2()
de rester dans cet ordre, mais si elle lève une exception, il ne se coince et exécuterdoSomething3()
? Vous pourriez placerdoSomething2()
dans un try catch block (bloc try imbriqué), et vos prises ne pouvait rien faire commecatch (Exception e) {}
.Je veux initialiser certaines valeur finale à
doSomething()
, et si l'exception est levée, je veux la valeur finale de tenir certaines de repli de la valeur. Comment faire alors?Si vous souhaitez modifier la valeur, il n'est pas définitive.
try { doSomething1(); doSomething2(); doSomething3(); } catch (Exception e) { doSomething4(); }
@ThePerson je veux faire quelque chose commedoSomething1,2,3
exécuter qu'un seul fichier tous les trois ont pas exception comment puis-je obtenir?OriginalL'auteur ThePerson
Viens de mettre le code dans le
try
bloc. Si une exception est lancée, il va passer à lacatch
bloc. Si aucune exception n'est levée, le code s'exécutera seulement.SomeException
est très général et s'il peut être jeté en bas de la ligne parcodeThatShouldBeRunIfNoExceptionThrown
, ou si cette méthode changements de jeter cette exception dans le futur, alors votre bloc catch va (silencieusement) n'est plus exactement l'exception d'origine.Vous répondez est fine (+1). J'ai mis à jour en mettant l'accent sur l'exigence de départ.
OriginalL'auteur pathfinderelite
Une amélioration de la proposition de
de la accepté de répondre. Ce que vous devez faire est:
Ci-dessus se sent comme exagéré pour quelqu'un qui n'a pas été exposés à "code propre de la pensée".
Mais le point ici: vous n' pas voulez mélanger différentes abstractions dans une méthode. En d'autres termes: vous n'avez pas un bloc try, et plus de code suivant derrière, à l'intérieur de la même méthode.
Vous assurez-vous que chaque et toute méthode contient un simple chemin - vous éviter tout ce qui complique la lecture de flux. Dès que vous êtes utilisé pour l'écriture et la lecture tels genre de code, vous découvrirez que cela vous prend beaucoup plus de temps pour comprendre votre code.
Merci. Toujours un plaisir de vous entendre 😉
OriginalL'auteur GhostCat
Exceptions pour le contrôle de flux est une mauvaise pratique. Si vous insistez, utiliser un
boolean
variable.OriginalL'auteur Adrian