Heim  >  Artikel  >  Java  >  Einführung in Java-Ausnahmebehandlungsmethoden (mit Code)

Einführung in Java-Ausnahmebehandlungsmethoden (mit Code)

不言
不言nach vorne
2019-04-15 09:47:042191Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in die Java-Ausnahmebehandlungsmethoden (mit Code). Ich hoffe, dass er Ihnen als Referenz dienen wird.

Vorwort: Egal in unserer Arbeit oder unserem Leben, es wird immer verschiedene „Fehler“ und verschiedene plötzliche „Abnormalitäten“ geben. Egal wie intensiv wir uns vorbereiten und testen, diese Anomalien werden immer irgendwann auftreten. Wenn sie nicht richtig oder nicht rechtzeitig behoben werden, führen sie oft zu anderen neuen Problemen. Daher müssen wir immer auf diese Fallstricke achten und eine Reihe von „Best Practices“ benötigen, um einen vollständigen Ausnahmebehandlungsmechanismus einzurichten.

Text

Anomalieklassifizierung

Einführung in Java-Ausnahmebehandlungsmethoden (mit Code)

Zunächst habe ich hier ein Strukturdiagramm der Anomalieklassifizierung gezeichnet.

Im JDK ist Throwable die übergeordnete Klasse aller Ausnahmen, die in „Error“ und „Exception“ unterteilt sind. Fehler bedeutet, dass ein unkontrollierbarer schwerwiegender Fehler aufgetreten ist, z. B. OutOfMemoryError. Ausnahmen sind in zwei Kategorien unterteilt (Prüfung): Wir müssen die Methodendefinition manuell versuchen/abfangen oder auslösen. Der Compiler prüft ihre Rechtmäßigkeit während der Kompilierung. Ungeprüfte Ausnahmen (deaktivieren) erfordern keine vorherige Bearbeitung durch uns. Diese einfachen Konzepte müssen von Entwicklern beherrscht werden. Hier werde ich eine Illustration zeigen, ohne sie im Detail zu beschreiben.

try/catch/finally neu erkennen

Wenn es um die Ausnahmebehandlung geht, muss hier try/catch/finally erwähnt werden. „try“ kann nicht alleine existieren, es muss mit „catch“, „final“ oder allen dreien gleichzeitig gepaart werden.
1. Codeblock ausprobieren: Wenn die entsprechende Ausnahme gefunden wird, springen Sie zum Catch.
2. Codeblock abfangen: Wenn die entsprechende Ausnahme auftritt, wird der darin enthaltene Code ausgeführt, entweder behandelt oder nach oben geworfen.
3. Schließlich muss der Codeblock ausgeführt werden, unabhängig davon, ob eine Ausnahme vorliegt. Er wird im Allgemeinen zum Bereinigen von Ressourcen, zum Freigeben von Verbindungen usw. verwendet. Es gibt jedoch mehrere Situationen, in denen der Code hier nicht ausgeführt wird.

  • Der Codeausführungsablauf gelangt nicht in den Try-Code-Block.
  • Der Code tritt in einer Endlosschleife, einem Deadlock und anderen Zuständen im Try-Codeblock auf.
  • Die System.exit()-Operation wird im Try-Codeblock ausgeführt.

versuchen/fangen/endlich fangen

Hier sind zwei Fallen, auf die wir bei der Verwendung von tcf stoßen können.

Code 1

public class TCFDemo {
    public static void main(String[] args) {
        //11
        System.out.println(returnVal());
    }

    static int returnVal(){
        int a = 1;
        int b = 10;
        try{
            return ++a;
        }finally {
            return ++b;
        }
    }
}

Falle 1: Fügen Sie schließlich eine Return-Anweisung hinzu, die den Rückgabewert des Try-Codes überschreibt. Wenn die Geschäftslogik komplex ist, gerät man leicht in eine trap hier, nein Hilft bei der Fehlerbehebung.

Code 2

public class TCFDemo {
    public static void main(String[] args) {
        Lock lock = new ReentrantLock();
       try{
            //有可能加锁失败
            lock.lock();
            //dost
       }finally {
           lock.unlock();
       }
    }
}

Falle 2: Da die Sperrmethode beim Sperren möglicherweise eine Uncheck-Ausnahme auslöst, wird die Entsperrmethode unweigerlich ausgeführt, wenn sie sich in einem Try-Codeblock befindet. Da die Sperrung zu diesem Zeitpunkt nicht erfolgreich ist, wird eine IllegalMonitorStateException ausgelöst. Auf diese Weise überschreibt die letztere Ausnahme die früheren Sperrfehler-Ausnahmeinformationen, sodass wir die Sperrmethode außerhalb des Try-Codeblocks verschieben sollten.

Best Practices

Okay, ich habe kurz die Klassifizierung von Ausnahmen und die Vorsichtsmaßnahmen für try/catch/finally vorgestellt. Jetzt können wir zusammenfassen, was wir tun Was sind die „Best Practices“ beim Umgang mit Ausnahmen?

  1. Wenn eine Ausnahme ausgelöst werden muss, müssen Ausnahmen mit geschäftlicher Bedeutung entsprechend dem aktuellen Geschäftsszenario definiert werden, und Ausnahmen, die innerhalb der Branche oder im Team definiert sind, sollten zuerst verwendet werden. Wenn Sie beispielsweise Dubbo verwenden, um einen Remote-Dienstaufruf durchzuführen, bei dem eine Zeitüberschreitung auftritt, wird DubboTimeoutException ausgelöst, anstatt RuntimeException direkt auszulösen.
  2. Verwenden Sie die Return-Anweisung nicht im Final-Codeblock, um die Beurteilung des Rückgabewerts nicht zu erschweren.
  3. Fängt die spezifische Unterklasse der Ausnahme ab, nicht Exception, nicht auslösbar. Dadurch werden alle Fehler abgefangen, einschließlich schwerwiegender Fehler, die von der JVM ausgelöst werden und nicht behandelt werden können.
  4. Denken Sie daran, keine Ausnahme zu ignorieren (fangen Sie sie ab und unternehmen Sie nichts). Auch wenn Sie jetzt sicherstellen können, dass sie den normalen Betrieb der Logik nicht beeinträchtigt, kann niemand garantieren, wie sich der Code in Zukunft ändern wird . Graben Sie es nicht.
  5. Verwenden Sie keine Ausnahmen als Kontrollfluss. Dies ist ein sehr seltsamer Ansatz, der sich auch auf die Leistung auswirkt.
  6. Vorgänge wie das Bereinigen von Ressourcen und das Freigeben von Verbindungen müssen im Final-Codeblock platziert werden, um Speicherlecks zu verhindern. Wenn die vom Final-Block verarbeitete Logik relativ groß und modular ist, können wir sie in Tool-Methodenaufrufe kapseln , und der Code wird einfacher.

Ende

Eine kleine Anomalie bringt großes Lernen mit sich, was denken Sie?

Das obige ist der detaillierte Inhalt vonEinführung in Java-Ausnahmebehandlungsmethoden (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen