System.console () vs. System.out

1. Einleitung

In diesem Tutorial werden die Unterschiede zwischen System.console () und System.out untersucht .

2. System.console ()

Erstellen wir zunächst ein Programm zum Abrufen des Konsolenobjekts :

void printConsoleObject() { Console console = System.console(); console.writer().print(console); }

Wenn Sie dieses Programm von einem interaktiven Terminal aus ausführen, wird so etwas wie [E-Mail geschützt] ausgegeben.

Wenn Sie es jedoch von einem anderen Medium aus ausführen, wird NullPointerException ausgelöst, da das Konsolenobjekt null wäre .

Oder wenn wir das Programm wie folgt ausführen:

$ java ConsoleAndOut > test.txt

Dann löst das Programm auch eine NullPointerException aus, während wir den Stream umleiten.

Die Console- Klasse bietet auch Methoden zum Lesen von Kennwörtern, ohne das Zeichen wiederzugeben.

Lassen Sie uns das in Aktion sehen:

void readPasswordFromConsole() { Console console = System.console(); char[] password = console.readPassword("Enter password: "); console.printf(String.valueOf(password)); }

Dies fordert zur Eingabe des Kennworts auf und gibt die Zeichen nicht wieder, während wir es eingeben.

3. System.out

Lassen Sie uns nun das Objekt von System.out drucken :

System.out.println(System.out);

Dies gibt so etwas wie java.io.PrintStream zurück.

Die Ausgabe ist von überall gleich.

System.out wird zum Drucken von Daten in den Ausgabestream verwendet, und es gibt keine Methoden zum Lesen von Daten. Der Ausgabestream kann an ein beliebiges Ziel wie eine Datei umgeleitet werden, und die Ausgabe bleibt unverändert.

Wir können das Programm ausführen als:

$ java ConsoleAndOut > test.txt

Dadurch wird die Ausgabe in die Datei test.txt gedruckt .

4. Unterschiede

Anhand der Beispiele können wir einige Unterschiede feststellen:

  • System.console () gibt eine java.io.Console- Instanz zurück, wenn sie von einem interaktiven Terminal ausgeführt wird. Andererseits gibt System.out das Objekt java.io.PrintStream unabhängig vom Aufrufmedium zurück
  • Das Verhalten von System.out und System.console () ist ähnlich, wenn keine Streams umgeleitet wurden. Andernfalls System.Console () kehrt null
  • Wenn mehrere Threads zur Eingabe auffordern , stellt die Konsole diese Eingabeaufforderungen in eine Warteschlange - während im Fall von System.out alle Eingabeaufforderungen gleichzeitig angezeigt werden

5. Schlussfolgerung

In diesem Artikel haben wir die Unterschiede zwischen System.console () und System.out kennengelernt . Wir haben erklärt, dass die Konsole nützlich ist, wenn eine Anwendung über eine interaktive Konsole ausgeführt werden soll, aber einige Besonderheiten aufweist, die beachtet und behoben werden sollten.

Wie immer ist der vollständige Code für diesen Artikel auf GitHub verfügbar.