Raisons et scénarios pour utiliser l'essayer et enfin ne pas utiliser de catch
Dans la boîte à outils concurrencée JDK, de nombreuses exceptions utilisent la structure suivante, telle que AbstractExecutorService, c'est-à-dire qu'il n'y a qu'essayer et enfin aucune prise.
Classe X {private final reentrantlock Lock = new reentrantLock (); unlock ()}}}Pourquoi utiliser cette structure? Quels sont les avantages? Regardez d'abord le code suivant
public void TestTryAndfinally (String Name) {try {name.length (); // nullpointerException} enfin {System.out.println ("aa");Le résultat de l'exécution de la réussite de la méthode est: imprimer aa sur la console et lancer une nulpointerException. Le processus d'exécution consiste à exécuter d'abord le bloc d'essai, à exécuter le bloc final après une exception se produit et enfin de lancer une exception dans l'essai à l'appelant. Ce résultat d'exécution est très normal, car il n'y a pas de gestionnaire d'exception de capture, toutes les méthodes ne peuvent que lancer l'exception générée vers l'extérieur;
Quels sont les avantages de cette approche? Pour Testtry et finalement, il fait ce qu'il doit faire et lance des exceptions qu'il ne peut pas gérer; En d'autres termes, cette structure réalise la séparation des responsabilités, réalise le découplage de la manipulation des exceptions et du nettoyage des exceptions, et permet à différentes méthodes de se concentrer sur ce qu'elles devraient faire. Alors, quand utiliser essai finalement et quand utiliser le try-plach-final? De toute évidence, cela dépend si la méthode elle-même peut gérer les exceptions qui apparaissent dans l'essai. Si vous pouvez le gérer vous-même, alors attrapez-le directement sans le jeter à l'appelant de la méthode; . Autrement dit, déclarer une exception qui lance peut apparaître dans la signature de la méthode et ne peut pas être gérée par elle-même, mais faire ce que vous devez faire dans la méthode.
La situation où la déclaration finalement ne sera pas exécutée
La seule situation où la déclaration finalement de Java ne sera pas exécutée est que la méthode System.exit () utilisée pour résilier le programme est en premier.
classe publique test {public static void main (String [] args) {try {System.out.println ("start"); } System.out.println ("end");Le résultat de sortie est:
Commencer
Bien sûr, si la puissance est soudainement coupée lors de l'exécution d'une déclaration d'essai générale sans l'instruction System.exit (), tous les processus se termineront et l'instruction finalement ne sera pas exécutée.