Comment puis-je faire en sorte que le code ne s'exécute que s'il n'y a pas eu d'exception levée?
Enfin, le code s'exécute, qu'il y ait eu une exception ou non.
try {
//do something
} catch (Exception e) {}
//do something only if nothing was thrown
Voici deux manières:
try {
somethingThatMayThrowAnException();
somethingElseAfterwards();
} catch (...) {
...
}
Ou si vous souhaitez que votre deuxième bloc de code soit en dehors du bloc try
:
boolean success = false;
try {
somethingThatMayThrowAnException();
success = true;
} catch (...) {
...
}
if (success) {
somethingElseAfterwards();
}
Vous pouvez également mettre l'instruction if
dans un bloc finally
, mais votre question ne contient pas suffisamment d'informations pour dire si cela serait préférable ou non.
try {
doSomething();
doSomething2();
} catch (Exception e) {
doSomething3();
}
Dans cet exemple, doSomething2()
ne sera exécuté que si aucune exception n'est levée par doSomething()
.
Si une exception est levée par doSomething()
, doSomething2();
sera ignoré et l'exécution passera à doSomething3();
Notez également que doSomething3()
sera exécuté si une exception est levée par doSomething2();
Si aucune exception n'est levée, doSomething3();
ne sera pas exécuté.
Il suffit de mettre le code dans le bloc try
. Si une exception est levée, il passera au bloc catch
. Si aucune exception n'est levée, le code sera simplement exécuté.
try {
someMethodThatMayThrowException();
codeThatShouldBeRunIfNoExceptionThrown();
} catch (Exception e) {...}
Les exceptions pour le contrôle de flux sont en quelque sorte une mauvaise pratique. Si vous insistez, utilisez une variable boolean
.
boolean thrown = false;
try {
//do something
} catch (Exception e) {
thrown = true;
}
//do something only if nothing was thrown
if (!thrown) {
// do stuff
}