[JAVA] Try-with-Resources und AutoCloseable

Ich dachte, Try-with-Resources könnte nur für Dinge verwendet werden, die im Allgemeinen IOExceptions generieren würden. Es scheint, dass es mit AutoCloseable für verschiedene Klassen aktiviert werden kann.

Informationen zum Ausprobieren von Ressourcen

Die try-with-resources-Anweisung ist eine try-Anweisung, die eine oder mehrere Ressourcen deklariert. Ressourcen sind Objekte, die nach Abschluss des Programms geschlossen werden müssen. Die Anweisung "try-with-resources" stellt sicher, dass jede Ressource am Ende der Anweisung geschlossen wird. Sie können jedes Objekt verwenden, das java.lang.AutoCloseable als Ressource implementiert, einschließlich aller Objekte, die java.io.Closeable implementieren.

Oracle Java Documentation https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Mit anderen Worten, wenn Sie AutoCloseable implementieren, können Sie Try-with-Resources unterstützen!

Über AutoCloseable

Ein Objekt, das eine Ressource (z. B. eine Datei oder ein Socket-Handle) enthalten kann, bis sie geschlossen wird. Die close () -Methode eines AutoCloseable-Objekts wird automatisch aufgerufen, wenn der Try-with-Resources-Block verlassen wird, in dem das Objekt im Ressourcenspezifikationsheader deklariert ist. Diese Struktur garantiert eine schnelle Freigabe und vermeidet Ausnahmen bei Ressourcenknappheit und andere mögliche Fehler. Im Paket java.lang enthalten.

Interface AutoCloseable https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/AutoCloseable.html

Ich möchte, dass Try-with-Resources automatisch geschlossen wird, wenn die try-Anweisung endet. Implementieren Sie außerdem die AutoCloseable-Schnittstelle für die Zielressource, für die beim Schließen ein spezieller Prozess eingefügt werden soll.

Über AutoCloseable und Closeable

Ähnlich wie bei AutoCloseable gibt es Closeable. Dies ist eine Schnittstelle, die AutoCloseable erbt und im Paket java.io enthalten ist. AutoCloseable löst eine Ausnahme aus, wenn eine Ausnahme auftritt, während Closeable eine IOException auslöst.

Die meisten Klassen im Paket java.io implementieren Closeable Klassen wie FileOutputStream und BufferedReader können mit try-with-resources deklariert werden.

verwenden

Wenn Sie Ressourcen automatisch mit Try-with-Resources freigeben möchten Es wird verwendet, wenn Sie beim Freigeben von Ressourcen eine andere Verarbeitung hinzufügen möchten.

SampleTryWithResources.java


public class SampleTryWithResources {
    public static void main(String[] args) {

//     Closeable(AutoCloseable)Die Klasse, die implementiert
//    try-with-Wenn es mit Ressourcen deklariert ist, wird es am Ende der try-Anweisung automatisch geschlossen.()Wird ausgeführt.
        try (SampleCloseAble sca = new SampleCloseAble()) {
            System.out.println("Try-With-Ressourcen beginnen");

            System.out.println("Versuchen Sie die laufende Anweisung");

            System.out.println("Try-With-Ressourcen enden");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class SampleCloseAble implements AutoCloseable {
    @Override
    public void close() throws Exception {
        System.out.println("Schließen der Closeable-Klasse()Lauf");
    }
}

sys.out


Try-With-Ressourcen beginnen
Versuchen Sie die laufende Anweisung
Try-With-Ressourcen enden
Schließen der Closeable-Klasse()Lauf

Die nach Abschluss der Verarbeitung in der try-Anweisung implementierte Methode close wird aufgerufen. Beachten Sie jedoch, dass die Methode close vor der catch-Anweisung aufgerufen wird, wenn in der try-Anweisung eine Ausnahme auftritt (siehe unten).

SampleTryWithResources2.java


public class SampleTryWithResources2 {
    public static void main(String[] args) {

        try (SampleCloseAble sca = new SampleCloseAble()) {
            System.out.println("Try-With-Ressourcen beginnen");

            System.out.println("Versuchen Sie die laufende Anweisung");

            throw new Exception();
        } catch (Exception e) {
            System.out.println("Versuchen Sie das Ende der Anweisungsausnahme");
            e.printStackTrace();
        }
    }
}

sys.out


Try-With-Ressourcen beginnen
Versuchen Sie die laufende Anweisung
Schließen der Closeable-Klasse()Lauf
Versuchen Sie das Ende der Anweisungsausnahme
java.lang.Exception
	at ...

Die Reihenfolge der Verarbeitung ist Verarbeitung in Try-Anweisung ⇒ AutoCloseable-Close-Methode ⇒ Verarbeitung in catch-Anweisung Wird sein.

Recommended Posts

Try-with-Resources und AutoCloseable
[Java] Unterschied zwischen Closeable und AutoCloseable
== und gleich