Pourquoi utilisons-nous enfin des blocs?
Aussi loin que je peux dire, à la fois des extraits de code suivants servent le même but. Pourquoi avoir finally
blocs?
Code:
try { /* Some code */ }
catch { /* Exception handling code */ }
finally { /* Cleanup code */ }
Code B:
try { /* Some code */ }
catch { /* Exception handling code */ }
//Cleanup code
- Ce n'est pas spécifique à C# c'est une .Net question
- Plus besoin avec java7: AutomaticResourceManagement, essayez(nouveau resourceDeclartion()){}
Vous devez vous connecter pour publier un commentaire.
Throwable
...)Un
finally
bloc permet de s'assurer que cependant vous la sortie de ce bloc (modulo quelques façons de l'abandon de l'ensemble du processus de manière explicite), il sera exécuté. C'est important pour le nettoyage déterministe de ressources.System.exit()
appel (2) il y a une boucle infinie dans l'essai ou de l'un des bloc catch (3) - je en tirant sur la fiche sur l'ordinateurRemarque que (en Java au moins, sans doute aussi en C#), il est également possible d'avoir un
try
bloc sanscatch
, mais avec unfinally
. Lorsqu'une exception se produit dans letry
bloc, le code de lafinally
bloc est exécuté avant que l'exception est levée plus haut:Vous voudrez peut-être mettre le code que vous voulez de toute façon exécutée indépendamment de ce qui se passe dans votre bloc try ou catch.
Aussi, si vous utilisez plusieurs catch et si vous voulez mettre un peu de code qui est commun à tous les blocs catch ce serait un endroit pour mettre - mais vous ne pouvez pas être sûr que l'ensemble du code a été exécuté.
Par exemple:
Enfin toujours est exécuté, où en tant que votre code après la capture peut pas.
Même si notre application est fermée avec force, il y aura certaines tâches, que l'on doit exécuter (comme la libérer de la mémoire, de la fermeture de la base de données, la libération de verrouillage, etc), si vous écrivez ces lignes de code dans le
finally
bloc il va exécuter si une exception est levée ou pas...Votre demande peut être une collection de fils,
Exception
s'arrête le thread, mais pas l'ensemble de l'application, dans ce casfinally
est plus utile.Dans certains cas,
finally
ne sera pas exécuté comme la JVM de l'Échec, du Fil de résilier, etc.Parce que vous avez besoin de ce code pour exécuter indépendamment de toutes les exceptions qui peuvent être levées. Par exemple, vous devrez peut-être nettoyer certaines des ressources non managées (l 'aide de' construire compile dans un try/finally bloc).
Il peut y avoir des moments où vous voulez exécuter un morceau de code n'importe quoi. Si une exception est levée ou non. Ensuite, on utilise le
finally
.finally
S'exécute TOUJOURS, à moins que la machine était à l'arrêt,finally
fournit une méthode pour mettre le code de nettoyage en un seul endroit.Il serait trop fastidieux si vous avez eu à mettre le nettoyage du code dans chacune des
catch
blocs.Si le bloc catch déclenche une exception alors reste du code ne sera pas exécuté par conséquent, nous devons écrire finalement bloc.
bloc finally en java peut être utilisé pour mettre le "nettoyage" du code tel que la fermeture d'un fichier, fermeture de la connexion, etc.
Le bloc finally ne sera pas exécuté si le programme se termine(soit par l'appel Système.exit() ou en provoquant une erreur fatale qui entraîne l'abandon du processus).