Zum Beispiel:
%Vor%Wird der InputStream, der an den Instructor übergeben wird, sofort geschlossen, nachdem das Testobjekt erstellt wurde? Oder ist es geschlossen, wenn das Testobjekt zerstört wird? Ich weiß nicht, wie man etwas ähnlich einem Destruktor in C ++ implementiert.
Es wird als Teil eines Konstruktors ausgeführt. Der Code, der in einem Konstruktor ausgeführt wird, ist normaler Code - es gibt dort keinen ungeraden Kontrollfluss. (Ich meine nach dem Aufruf des Superklassenkonstruktors und der Variablen / Instanzinitialisierer, die ausgeführt werden.)
Es gibt keine Entsprechung zu einem C ++ - Destruktor in Java. Am nächsten kommt ein Finalizer , aber das sollte nicht als Äquivalent eines C ++ - Destruktors verwendet werden. (Sie sollten fast nie Finalizer schreiben. Es gibt Fälle, in denen sie beim Herunterfahren nicht aufgerufen werden, und sie werden nicht-deterministisch genannt.)
In dem Fall, den Sie angegeben haben, würden Sie wahrscheinlich nicht möchten, dass Ihre Klasse die Verantwortung für das Schließen des Eingabestreams übernimmt - normalerweise ist der Code, der den Stream öffnet, auch für das Schließen verantwortlich. Wenn Sie jedoch dafür die Verantwortung übernehmen oder es einfach für Anrufer vereinfachen möchten, möchten Sie wahrscheinlich eine close()
-Methode bereitstellen, die den Stream einfach schließt. Vielleicht möchten Sie auch AutoCloseable
implementieren, damit Anrufer dies tun können Verwenden Sie eine try-with-resources-Anweisung mit Ihrer Klasse:
Das ruft test.close()
automatisch am Ende des Blocks try
auf.
Schließlich wird sofort nach dem Versuch ausgeführt. Es spielt keine Rolle, dass es im Konstruktor ist. Es ist in JLS . Es sagt: Eine try-Anweisung mit einem finally-Block wird ausgeführt, indem zuerst der try-Block ausgeführt wird. Dann gibt es eine Wahl:
Tags und Links java constructor try-finally