Warum wird die close () -Methode der Ressource zuvor in einem try-with-resources-Konstrukt in Java aufgerufen?

8

Ich habe zufällig festgestellt, dass dies der Fall ist. Siehe folgendes Beispiel:

%Vor%

Es druckt:

  

versuche es   Geschlossen.
  Aufgenommen
  Endlich

Frage

Die Try-with-resources wurden entwickelt, um die unordentlichen Endabschnitte mit Null-Checks zu vermeiden und um die ausgelaufenen Ressourcen zu vermeiden. Warum sind die Ressourcen VOR dem Fangbereich geschlossen? Was ist der Grund / die Idee / Begrenzung dahinter?

    
Gábor Lipták 31.07.2014, 10:59
quelle

1 Antwort

8

Die Antwort finden Sie in JLS §14.20 .3.2 ; Die wichtigsten Teile sind die letzten zwei Absätze, insbesondere der letzte Satz des vorletzten Absatzes (ich habe es betont):

  

Eine try-with-resources Anweisung mit mindestens einer catch Klausel und / oder einer finally Klausel heißt eine erweiterte try-with-resources Anweisung.

     

Die Bedeutung einer erweiterten try-with-resources -Anweisung:

%Vor%      

wird durch die folgende Übersetzung in eine grundlegende try-with-resources -Anweisung angegeben, die in einer try-catch oder try-finally oder try-catch-finally -Anweisung verschachtelt ist:

%Vor%      

Der Effekt der Übersetzung besteht darin, die Ressourcenspezifikation "innerhalb" der try -Anweisung zu setzen. Dies ermöglicht einer catch -Klausel einer erweiterten try-with-resources -Anweisung, aufgrund der automatischen Initialisierung oder des Schließens einer Ressource eine Ausnahme abzufangen.

     

Außerdem wurden alle Ressourcen bis zur Ausführung des Blocks finally geschlossen (oder versucht, geschlossen zu werden), entsprechend der Absicht des Schlüsselworts finally .

    
T.J. Crowder 31.07.2014, 11:06
quelle