J'examine un nouveau code. Le programme a uniquement un bloc try et un bloc. Puisque le bloc catch est exclu, comment le bloc try fonctionne-t-il s'il rencontre une exception ou quelque chose de jetable? Va-t-il juste directement au bloc final?
java
try-catch
finally
try-catch-finally
try-finally
NullPointer0x00
la source
la source
Réponses:
Si l'un des codes du bloc try peut lever une exception vérifiée, il doit apparaître dans la clause throws de la signature de méthode. Si une exception non vérifiée est levée, elle est exclue de la méthode.
Le bloc finally est toujours exécuté, qu'une exception soit levée ou non.
la source
Une petite note sur
try
/finally
: Le finally s'exécutera toujours sauf siSystem.exit()
est appelé.try{}
bloc ne se termine jamais (par exemple, une boucle sans fin).la source
try{..} catch{ throw ..} finally{..}
? Je pense que finalement ne sera pas exécutéLa spécification du langage Java (1) décrit comment
try-catch-finally
est exécuté. Ne pas avoir de prise équivaut à ne pas avoir de prise capable d'attraper le lancer donné.(1) Exécution de try-catch-finally
la source
L'intérieur est finalement exécuté avant de lancer l'exception sur le bloc externe.
Résulte en
la source
Le bloc finally est toujours exécuté après la fin du bloc try, que l'essai se termine normalement ou anormalement en raison d'une exception, euh, jetable.
Si une exception est levée par l'un des codes du bloc try, alors la méthode actuelle relance simplement (ou continue de lancer) la même exception (après avoir exécuté le bloc finally).
Si le bloc finally lève une exception / erreur / jetable, et qu'il y a déjà un jetable en attente, cela devient moche. Franchement, j'oublie exactement ce qui se passe (tant pour ma certification il y a des années). Je pense que les deux objets jetables sont liés ensemble, mais il y a un vaudou spécial que vous devez faire (c'est-à-dire - un appel de méthode que je devrais rechercher) pour obtenir le problème d'origine avant que le «enfin» ne vole, euh, vomi.
Incidemment, try / finally est une chose assez courante à faire pour la gestion des ressources, car java n'a pas de destructeurs.
Par exemple -
« Enfin », un petit conseil: si vous ne dérange pas de mettre en une prise, que ce soit spécifique de capture (attendue) des sous - classes throwable ou prises juste « Throwable », pas « Exception », un fourre-tout piège d'erreur générale. Trop de problèmes, tels que les erreurs de réflexion, lancent des «erreurs» plutôt que des «exceptions», et ceux-ci passeront à droite par tout «attrape tout» codé comme:
faites ceci à la place:
la source
Les versions Java antérieures à la version 7 permettent ces trois combinaisons de try-catch-finally ...
finally
block sera toujours exécuté, peu importe ce qui se passe dans le bloctry
or / andcatch
. donc s'il n'y a pas decatch
bloc, l'exception ne sera pas gérée ici.Cependant, vous aurez toujours besoin d'un gestionnaire d'exceptions quelque part dans votre code - à moins que vous ne souhaitiez que votre application plante complètement, bien sûr. Cela dépend de l'architecture de votre application exactement où se trouve ce gestionnaire.
la source
L'exception est levée hors du bloc, comme dans tout autre cas où elle n'est pas interceptée.
Le bloc finally est exécuté indépendamment de la façon dont le bloc try est sorti - qu'il y ait ou non des captures, qu'il y ait ou non une capture correspondante.
Les blocs catch et le finally sont des parties orthogonales du bloc try. Vous pouvez avoir l'un ou les deux. Avec Java 7, vous ne pourrez avoir ni l'un ni l'autre!
la source
N'essayez-vous pas avec ce programme? Il va enfin pouvoir bloquer et exécuter le bloc finally, mais l'exception ne sera pas gérée. Mais, cette exception peut être annulée dans le bloc finally!
la source
Le bloc finally est exécuté une fois le bloc try terminé. Si quelque chose est jeté à l'intérieur du bloc try quand il quitte, le bloc finally est exécuté.
la source
À l'intérieur du
try
bloc, nous écrivons des codes qui peuvent lever une exception. Lecatch
bloc est l'endroit où nous traitons l'exception. Lefinally
bloc est toujours exécuté, que l'exception se produise ou non.Maintenant, si nous avons un bloc try-finally au lieu d'un bloc try-catch-finally, l'exception ne sera pas gérée et après que le bloc try au lieu du contrôle passe au bloc catch, il va enfin bloquer. Nous pouvons utiliser le bloc try-finally lorsque nous ne voulons rien faire avec l'exception.
la source
Indépendamment de l'exception lancée ou non dans le
try
bloc, lefinally
bloc sera exécuté. L'exception ne serait pas interceptée.la source