Gründe und Szenarien für die Verwendung von Versuch und schließlich keinen Fang verwenden
Im JDK -Concurrency -Toolkit verwendet viele Ausnahmebehandlung die folgende Struktur wie AbstractExecutorService, dh nur Versuch und schließlich keinen Haken.
Klasse x {private final Reentrantlock lock = new Reentrantlock (); entrlock ()}}}Warum diese Struktur verwenden? Was sind die Vorteile? Schauen Sie sich zuerst den folgenden Code an
public void testtry undFinally (String -Name) {try {name.length (); // nullPointerexception} endlich {System.out.println ("aa");Das Ausführungsergebnis von Null Die Methode lautet: Drucken Sie AA auf die Konsole und werfen Sie eine NullPointerexception. Der Ausführungsprozess besteht darin, zuerst den Try -Block auszuführen, den endgültigen Block nach einer Ausnahme durchzuführen und schließlich eine Ausnahme in den Versuch zum Anrufer zu geben. Dieses Ausführungsergebnis ist sehr normal, da es keinen Ausnahmebehandler gibt, können alle Methoden die generierte Ausnahme nach außen auswirken.
Was sind die Vorteile dieses Ansatzes? Für Testtry und final macht es das, was es tun muss, und wirft Ausnahmen aus, die es für den Anrufer nicht bewältigen kann. Mit anderen Worten, diese Struktur erkennt die Trennung von Verantwortlichkeiten, erkennt die Entkopplung von Ausnahmebehandlung und Ausnahmereinigung und ermöglicht verschiedene Methoden, sich auf das zu konzentrieren, was sie tun sollten. Also, wann Sie Try-final verwenden und wann Sie Try-Catch-final verwenden können? Offensichtlich hängt es davon ab, ob die Methode selbst Ausnahmen verarbeiten kann, die im Versuch erscheinen. Wenn Sie es selbst umgehen können, fangen Sie es direkt an, ohne es dem Anrufer der Methode zu werfen. . Das heißt, deklarieren Sie eine Ausnahme, die Würfe in der Signatur der Methode auftreten und nicht alleine behandelt werden können, sondern tun, was Sie innerhalb der Methode tun sollten.
Die Situation, in der die endgültige Erklärung nicht ausgeführt wird
Die einzige Situation, in der die endgültige Aussage von Java nicht ausgeführt wird, ist, dass die Methode von System.exit () zuerst ausgeführt wird.
public class test {public static void main (String [] args) {try {System.out.println ("start"); } System.out.println ("Ende");Das Ausgangsergebnis ist:
Start
Wenn die Macht bei der Ausführung einer allgemeinen Versuchserklärung ohne die Anweisung von System.exit () plötzlich unterbrochen wird, werden alle Prozesse natürlich beendet und die schließlich nicht ausgeführt.