J'essaie d'utiliser le bloc finally sans utiliser les blocs try/catch mais obtenir l'erreur dans Eclipse.
Puis-je utiliser le bloc finally sans utiliser les blocs try/catch?
finally
devrait avoir au moins un bloc try
, catch
est facultatif. Enfin, l’objectif final est de s’assurer que tout est nettoyé, qu’une exception soit levée ou non. Selon le JLS
Une clause finally garantit que le bloc finally est exécuté après le bloc try et tout bloc catch qui pourrait être exécuté, quelle que soit la façon dont le contrôle quitte le bloc try ou le bloc catch.
Par conséquent, une finally
devrait toujours être précédée d'un bloc try
.
Vous devez avoir un bloc try
avec un bloc finally
. Le bloc try
définit les lignes de code qui seront suivies du code finally
. Si une exception est levée avant le bloc try
, le code finally
ne sera pas exécuté.
L'ajout de blocs catch
est facultatif:
try {
// something
} finally {
// guaranteed to run if execution enters the try block
}
try {
// Block of code with multiple exit points
}
finally {
// Block of code that must always be executed when the try block
// is exited, no matter how the try block is exited
}
Le bloc finally s'exécute toujours à la sortie du bloc try. Donc, vous pouvez utiliser finalement sans catch mais vous devez utiliser try.
Pour plus de détails, consultez doc ici
La raison pour laquelle vous ne pouvez pas avoir un finally
sans un try
est parce que vous pourriez avoir plusieurs instructions finally
dans la même portée et que try
indique à quel bloc de code la finally
appartient en cas d'erreur.
Une autre caractéristique intéressante de la finally
est qu’elle doit s’exécuter quelle que soit la date à laquelle la try
est entrée. Par exemple, que se passe-t-il si vous utilisez une variable goto
pour ignorer votre instruction finally
? Si goto
est à l'intérieur de try
, il exécutera l'instruction finally
; toutefois, si goto
est au-dessus/à l'extérieur de l'instruction try
, le code finally
sera ignoré. finally
ne concerne que le code entouré de try
. Si vous n'avez pas essayé, alors la finally
n'est pertinente pour rien.
Si une exception est levée avant le bloc try, le code finally ne sera pas exécuté. Le bloc finally s'exécute toujours à la sortie du bloc try. Donc, vous pouvez utiliser finalement sans catch mais vous devez utiliser try.
De Oracle Trails:
Le bloc finally s'exécute toujours à la sortie du bloc try. Ce assure que le bloc finally est exécuté même en cas d'inattendu une exception se produit.
De la déclaration ci-dessus, vous ne pouvez pas avoir enfin bloquer seul par lui-même. ci-dessous sont les combinaisons autorisées.
essayez capture enfin
essayez capture
essayez enfin
L'exécution du code dans le bloc finally
est garantie si le flux de contrôle du programme entre dans le bloc try
correspondant. Il n’a donc aucun sens d’avoir une finally
sans une try
.
La seule exception à cette règle est si le programme rencontre un appel System.exit(...)
avant le bloc finally
, car il ferme la machine virtuelle.
Non tu ne peux pas
vous pouvez utiliser Try-catch-finally
ou try-finally
try {
}catch (Exception e){
}
finally{
}
ou
try {
}
finally{
}
Une instruction try doit avoir un bloc catch ou un bloc, elle peut avoir les deux blocs.
Nous ne pouvons écrire aucun code entre les blocs try-catch-finally.
Nous ne pouvons pas avoir de clause catch ou finally sans une instruction try.
Nous pouvons avoir plusieurs blocs catch avec une seule instruction try. Les blocs catch peuvent être imbriqués de la même manière que les instructions if-else.
Nous ne pouvons avoir qu'un dernier bloc avec une déclaration try-catch.