j.u.Scanner(Sys.in).nextLine() wieder schließen?

tryn4x

Mitglied
Hallo!

Ich bin gerade etwas am verzweifeln...
Könnte mir jemand sagen wie ich

Java:
String name = Java.util.Scanner(System.in).nextLine();

wieder schließe?

Wäre die Zeile
Java:
Scanner sc1 = new Scanner();

Wüsste ich das ich
Java:
sc1.close();

schreiben müsste.

Danke im voraus.
 

KonradN

Top Contributor
Wenn Du die Instanz nicht ine ine Variable schreibst, dann kannst Du da auch keine Methode aufrufen und das Schließen ist nun einmal auch nur ein close() Aufruf.

Und wenn Du einen Scanner auf System.in erzeugst, dann willst Du diesen NICHT schließen. Das Schließen des Scanners schließt ach den zugrunde liegenden Stream und man schließt nichts, das man nicht "besitzt".

Optionen, die du hast, wären z.B.:
- Du kannst den Scanner auf System.in in eine Konstante einer Klasse packen.
- Du kannst einen Wrapper schreiben oder nutzen, der System.in umschließt und ein Schließen nicht weiter gibt.

Generell wäre der Ansatz aber auch das try with resources, wenn Du in einem Block eine Instanz erzeugst, die AutoClosable implementiert:
Java:
try (Scanner scanner = new Scanner(System.in)) {
    // Do something with scanner here
}
Aber noch einmal der Hinweis: Einen Scanner auf System.in schließt man nicht, da System.in sonst geschlossen wird!
 

tryn4x

Mitglied
Hallo nochmal.
entschuldigen Sie, aber habe es immer noch nicht ganz verstanden. Und vielleicht habe ich meine Frage falsch formuliert. Da ich meine Frage nicht editieren kann kommt diese nochmal umgeschrieben:

Hallo.
Ich hätte nochmal eine Frage die mir keine Ruhe lässt..

Ich habe:
Java:
String name = new java.util.Scanner(System.in).nextLine();
In:
Java:
Java.util.Scanner sc = new java.util.Scanner(System.in);
abgeändert. Warum ist hier nicht wichtig, wollte mich nur selbst testen.

Was ist der Unterschied?
Die erste Zeile steht so im Buch, leider ziemlich früh, kann diese aber nicht mit "close()" schließen.

Die zweite Zeile lässt sich aber mit
Code:
sc.close();
schließen, da eine Instanz von "scanner" geschlossen werden muss. Aber was ist mit Zeile eins? Wie wird diese (intern) geschlossen?

Im Buch steht nur, Zitat:
.... sollte mit "close()" der "Scanner" geschlossen werden, der das "close()" zum closeable weiterleitet. (anm: ab hier betrifft es die erste Zeile) Beim String ist das nicht nötig, und bei "file" schließt der "Scanner" automatisch.
Warum ist es nicht nötig bei "String" diese zu schließen?

In der zweiten Zeile erzeuge ich ja eine "Scanner"-Instanz...
In der ersten aber nicht, dort wird nur der eingegebene Wert (ein String) bei der Eingabe gespeichert.

Aber eine Warnung zu Zeile eins:
Java:
String name = new java.util.Scanner(System.in).nextLine();
"Warning: resource leak <unassigned closeable value> is never close"
Sollte ja beachtet werden.

Worum besteht der Unterschied der beiden Zeilen?

Danke nochmal.
 
Zuletzt bearbeitet:

LimDul

Top Contributor
Bei der ersten Zeile wird nix geschlossen. Das ist auch kein "String" Scanner, sondern ein Scanner auf System.in. Und wie @KonradN schon geschrieben hat, man schließt nix, was man nicht selber aufgemacht hat. Und System.in ist etwas, das wird nicht geschlossen, sondern bleibt über die gesamte Programmlaufzeit offen, weil es die normale Standardeingabe der Konsole ist.
 

KonradN

Top Contributor
Aber was ist mit Zeile eins? Wie wird diese (intern) geschlossen?
In der Zeile erzeugst Du auch einen Scanner. new Scanner(System.in) erzeugt einen neuen Scanner.

In der ersten Variante speicherst Du aber keine Referenz auf diese Instanz. Statt dessen rufst Du direkt eine Methode darauf auf. Danach bekommst Du das Ergebnis dieser Methode zurück.

Und da wird nichts geschlossen. Da du keine Referenz mehr auf diese Scanner Instanz hast, wird der Garbage Collector diese Instanz irgendwann in der Zukunft aus dem Speicher entfernen.

Und die Scanner Klasse bietet mehrere Konstruktoren. So kannst Du eine Scanner Instanz auf einem InputStream erzeugen. System.in ist ein InputStream.
Statt dessen kannst Du es auch auf einer Datei öffnen. Wenn Du irgendwann die ganze Datei gelesen hast, dann wird die Datei automatisch wieder geschlossen.
Und als letzte Möglichkeit kannst Du einen Scanner direkt auf einem String erzeugen. Da ist dann nichts zu schließen, denn es wird dann direkt der String verarbeitet, der dem Scanner gegeben wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Scanner - nextLine() gibt leeren String zurück Java Basics - Anfänger-Themen 2
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
Z NoSuchElementException - Scanner.nextLine() Java Basics - Anfänger-Themen 4
N Scanner next() oder nextLine() zur prüfung auf leere Eingabe... Java Basics - Anfänger-Themen 6
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
J Erste Schritte Scanner Java Basics - Anfänger-Themen 4
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
M Scanner Klasse Java Basics - Anfänger-Themen 4
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 1
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
J Scanner-Klasse Java Basics - Anfänger-Themen 2
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N Problem mit Scanner Java Basics - Anfänger-Themen 2
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
A Scanner-Error Java Basics - Anfänger-Themen 8
D Java Scanner Java Basics - Anfänger-Themen 9
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
I Scanner auf 10 Stellen begrenzt? Java Basics - Anfänger-Themen 5
B Barcode Scanner Java Basics - Anfänger-Themen 3
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
S Scanner Java Basics - Anfänger-Themen 36
S Frage zu Scanner Java Basics - Anfänger-Themen 3
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
O Scanner Klasse Java Basics - Anfänger-Themen 8
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
W Eclipse Che Scanner Java Basics - Anfänger-Themen 8
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
X Erste Schritte Problem mit scanner Java Basics - Anfänger-Themen 2
A Scanner.useLocale(Locale.US); Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
I Scanner und Arrays Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
Neoline Methoden Scanner Methode Java Basics - Anfänger-Themen 9
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
W Wie arbeite ich mit dem Typ Scanner? Java Basics - Anfänger-Themen 5
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
R CMDTools Scanner Fehler Java Basics - Anfänger-Themen 10
D nextInt() nicht für Scanner definiert? Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
F Scanner Problem Java Basics - Anfänger-Themen 8
T Variablen Array mit Scanner befüllen Java Basics - Anfänger-Themen 6
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
T Problem mit Scanner. Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
Silvascus Scanner Problem Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
O POI Apache sheet scanner Java Basics - Anfänger-Themen 1
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
M Input/Output Scanner schließt nicht Java Basics - Anfänger-Themen 2
M Scanner class Java Basics - Anfänger-Themen 6
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
S Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben Java Basics - Anfänger-Themen 6
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
R scanner in String funktioniert nicht Java Basics - Anfänger-Themen 1
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
A InputMismatchException mit Scanner Java Basics - Anfänger-Themen 6
J scanner, String einlesen und vergleichen Java Basics - Anfänger-Themen 3
B Input/Output Scanner-Probleme bei String-Lesen Java Basics - Anfänger-Themen 3
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
Y Probleme mit Scanner. Hilfe! Java Basics - Anfänger-Themen 2
DeVolt Anfängerfrage zu util.scanner Java Basics - Anfänger-Themen 2
A Text mit "Scanner" eingeben und Umlaute ersetzen Java Basics - Anfänger-Themen 7
N Rekursive Addition mit Scanner Java Basics - Anfänger-Themen 12
J Scanner & BufferedReader Java Basics - Anfänger-Themen 3
S Compiler-Fehler Scanner java.util NoSuchElementExeption Java Basics - Anfänger-Themen 8
F Problem mit der While schleife und dem Scanner Java Basics - Anfänger-Themen 2
G No line found-Fehler bei Scanner Java Basics - Anfänger-Themen 7
B Scanner-Problem bei Eingabe Java Basics - Anfänger-Themen 4
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29

Ähnliche Java Themen


Oben