J'ai vu un code comme celui-ci:
try
{
db.store(mydata);
}
finally
{
db.cleanup();
}
Je pensais que try
est supposé avoir un catch
?
Pourquoi ce code le fait-il de cette façon?
J'ai vu un code comme celui-ci:
try
{
db.store(mydata);
}
finally
{
db.cleanup();
}
Je pensais que try
est supposé avoir un catch
?
Pourquoi ce code le fait-il de cette façon?
Cela est utile si vous souhaitez que la méthode en cours d'exécution lève toujours l'exception tout en permettant de nettoyer les ressources de manière appropriée. Vous trouverez ci-dessous un exemple concret de gestion de l'exception à partir d'une méthode d'appel.
public void yourOtherMethod() {
try {
yourMethod();
} catch (YourException ex) {
// handle exception
}
}
public void yourMethod() throws YourException {
try {
db.store(mydata);
} finally {
db.cleanup();
}
}
Pourquoi ce code ne il de cette façon?
Apparemment parce que le code ne sait pas comment gérer les exceptions à ce niveau. C'est très bien , tant que l'une des parties n', c'est à dire aussi longtemps que l'exception est finalement traitée quelque part.
Souvent, au code de bas niveau ne peut pas réagir de façon appropriée à des exceptions, car l'utilisateur doit être notifié, ou de l'exception doit être enregistré, ou une autre stratégie doit être essayé. Faible niveau de code effectue une fonction uniquement et ne connaît pas de plus haut niveau de prise de décision.
Mais le code doit toujours nettoyer ses ressources (parce que si ça ne marche pas, ils seraient en fuite), de sorte qu'il n'est juste que dans l'
finally
de la clause, en veillant à toujours se produit, si une exception a été levée ou non.
Le bloc finally garantit que même lorsqu'une exception RuntimeException est levée (peut-être en raison d'un bogue dans le code appelé), l'appel db.cleanup()
sera effectué.
Ceci est également souvent utilisé pour éviter de trop imbriquer:
try
{
if (foo) return false;
//bla ...
return true;
}
finally
{
//clean up
}
En particulier lorsque la méthode renvoie de nombreux points, cela améliore la lisibilité, car tout le monde peut voir que le code de nettoyage est appelé dans tous les cas.
Le code est fait pour s'assurer que la base de données est fermée.
Généralement, la façon dont vous devez faire c'est de mettre toute votre base de données, l'accès à code dans le bloc try, et puis mettre un appel pour fermer la base de données dans le bloc finally.
Le chemin, essayer...enfin œuvres, signifie que le code dans le bloc try est exécuté, et le code dans le bloc finally est exécuté lorsque cela se termine...n'importe quoi.
Court de l'ordinateur d'arrachement du mur, enfin à exécuter.
Cela signifie que même si une exception est appelé, et la méthode prend trois ans pour l'exécuter, il pourra toujours aller dans le bloc finally et la base de données sera fermé.
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.