Sagen Sie, ich habe den folgenden Beispielcode:
%Vor% Ich lese die Oracle-Dokumentation zur Klasse Scanner
und stieß auf dieses:
Wenn ein Scanner geschlossen wird, schließt er seine Eingabequelle, wenn die Quelle die Closeable-Schnittstelle implementiert.
Bedeutet dies, dass, wenn einmal ein Scanner
(von System.in
) geschlossen ist, ich nicht mehr System.in
im gesamten Java-Programm verwenden kann? Oder bedeutet es, dass ich es nicht mehr in der Klasse verwenden kann? Oder nur die Methode? Oder nur sein Umfang?
Eine andere Frage, die ich habe, ist, ist ein Scanner auf den Bereich beschränkt, in dem er deklariert wurde (ähnlich den primitiven Datentypen)?
Ja, es bedeutet, dass System.in
geschlossen wird. Testfall:
Dieser Code endet mit
%Vor% Nach dem Schließen können Sie System.in
nicht mehr für den Rest Ihres Programms verwenden. Die Tatsache, dass close()
übergeben wird, ist nett, weil Sie nicht einen separaten Verweis auf den Eingabestream pflegen müssen, damit Sie ihn später schließen können, zum Beispiel:
Sie können das tun und .close()
auf dem Scanner aufrufen, um den zugrunde liegenden Stream zu schließen.
In den meisten Fällen möchten Sie System.in
nicht schließen, daher sollten Sie in diesem Fall .close()
nicht aufrufen.
Tags und Links java java.util.scanner