Dans ce code sera someVar
défini même si le bloc catch est exécuté et la deuxième exception est levée?
public void someFunction() throws Exception {
try {
//CODE HERE
} catch (Exception e) {
Log.e(TAG, "", e);
throw new Exception(e);
} finally {
this.someVar= true;
}
}
Réponses:
Oui, les blocs finally s'exécutent toujours ... sauf quand:
System.exit(0);
De plus, si une méthode de votre bloc finally lève une exception non interceptée, rien après cela ne sera exécuté (c'est-à-dire que l'exception sera lancée comme elle le ferait dans tout autre code). Un cas très courant où cela se produit est
java.sql.Connection.close()
.En passant, je suppose que l'exemple de code que vous avez utilisé n'est qu'un exemple, mais faites attention à ne pas mettre la logique réelle dans un bloc finally. Le bloc finally est destiné au nettoyage des ressources (fermeture des connexions de base de données, libération des descripteurs de fichiers, etc.), et non à la logique à exécuter. S'il doit s'exécuter, faites-le avant le bloc try-catch, loin de quelque chose qui pourrait lever une exception, car votre intention est presque certainement fonctionnellement la même.
la source
finally
est alors spécifié en termes de terminaisons normales et brusques.Oui.
Consultez la documentation :
Des exceptions:
la source
Enfin, le bloc s'exécute toujours.
}
la source
Enfin est toujours exécuté, quel que soit votre cas ie
Pour les exceptions non vérifiées, java n'impose pas de gestion des erreurs. ceci étant la raison, si une exception non vérifiée se produit dans le bloc finally et qu'aucune manipulation n'est effectuée pour cela, alors le code écrit en dessous de ce point (où l'erreur s'est produite) ne sera pas exécuté.
Je suggère donc de toujours gérer toutes les exceptions, qu'elles soient cochées ou décochées. De cette façon, vous pouvez vous assurer que le bloc de code dans finally est également exécuté, peu importe si une exception non cochée se produit également. vous avez une place dans la capture de sous-nid et le bloc Enfin pour faire le travail nécessaire.
la source
Le bloc finally s'exécute toujours lorsque le bloc try se termine. Sauf si vous avez System.exit (0) dans votre try ou catch.
la source
Oui.
finally
block s'exécute toujours sauf dans le cas où vous appelez System.exit () car il arrête Java VM.la source