web-dev-qa-db-fra.com

Code d'exécution Java uniquement si aucune exception n'est générée dans try and catch block?

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
16
Muhammad Umer

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.

41
khelwood
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é.

17
ThePerson

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) {...}
3
pathfinderelite

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
}
0
Adrian