web-dev-qa-db-fra.com

Est-il valide d'avoir enfin bloquer sans essayer et attraper?

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?

15
prashanth

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.

14
NINCOMPOOP

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
}
6
Duncan Jones
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
}
4
Ankit Sood

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

2
stinepike

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.

1
CodeCamper

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.

1
Shabbir

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. 

  1. essayez capture enfin 

  2. essayez capture

  3. essayez enfin 

0
PermGenError
  • Utiliser uniquement try block n'est pas correct.
  • Try block peut être utilisé avec un seul bloc de catch ou enfin Bloc.
  • Vous pouvez utiliser try block avec catch et finally.
0
Reetika

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.

0
Bathsheba

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.

0
Sreejesh K Nair