100 votes

Pourquoi utilisons-nous enfin des blocs ?

Pour autant que je sache, les deux extraits de code suivants serviront le même but. Pourquoi les blocs finally sont-ils bloqués ?

Code A :

try { /* Some code */ }
catch { /* Exception handling code */ }
finally { /* Cleanup code */ }

Code B :

try { /* Some code */ }
catch { /* Exception handling code */ }
// Cleanup code

150voto

Jon Skeet Points 692016
  • Que se passe-t-il si une exception que vous ne manipulez pas est jetée ? (J'espère que vous n'attrapez pas Throwable...)
  • Que se passe-t-il si vous revenez de l'intérieur du bloc try ?
  • Que se passe-t-il si le bloc de capture lance une exception ?

Un bloc finally s'assure que, quelle que soit la façon dont vous quittez ce bloc (modulo quelques façons d'interrompre explicitement l'ensemble du processus), il sera exécuté. C'est important pour le nettoyage déterministe des ressources.

13voto

Jesper Points 65733

Notez que (en Java du moins, probablement aussi en C#) il est également possible d'avoir un bloc try sans catch, mais avec un finally. Lorsqu'une exception se produit dans le bloc try, le code dans le bloc finally est exécuté avant que l'exception ne soit lancée plus haut :

InputStream in = new FileInputStream("somefile.xyz");
try {
    somethingThatMightThrowAnException();
}
finally {
    // cleanup here
    in.close();
}

7voto

Balaji Natesan Points 21

Vous pouvez mettre le code que vous voulez quand même être exécuté indépendamment de ce qui se passe dans votre bloc try or catch.

Aussi, si vous utilisez plusieurs captures et si vous voulez mettre un peu de code qui est commun pour tous les blocs de capture, ce serait un endroit à mettre- mais vous ne pouvez pas être sûr que le code entier dans try a été exécuté.

Par exemple :

conn c1 = new connection();
try {
    c1.dosomething();
} catch (ExceptionA exa) {
    handleexA();
    //c1.close();
} catch (ExceptionB exb) {
    handleexB();
    //c1.close();
} finally {
    c1.close();
}

5voto

Sruly Points 3361

Enfin se fait toujours exécuter, où comme votre code après la prise peut ne pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X