System.console () vs. System.out

1. Introduzione

In questo tutorial, esploreremo le differenze tra System.console () e System.out .

2. System.console ()

Creiamo prima un programma per recuperare l' oggetto Console :

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

L'esecuzione di questo programma da un terminale interattivo produrrà qualcosa come [email protected]

Tuttavia, eseguirlo da altri mezzi genererà NullPointerException poiché l'oggetto console sarebbe null .

Oppure, se eseguiamo il programma come di seguito:

$ java ConsoleAndOut > test.txt

quindi il programma lancerà anche un'eccezione NullPointerException mentre reindirizziamo il flusso.

La classe Console fornisce anche metodi per leggere le password senza ripetere il carattere.

Vediamolo in azione:

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

Questo richiederà la password e non farà eco i caratteri mentre la digitiamo.

3. System.out

Stampiamo ora l'oggetto di System.out :

System.out.println(System.out);

Questo restituirà qualcosa come java.io.PrintStream.

L'output sarà lo stesso da qualsiasi luogo.

System.out viene utilizzato per stampare i dati nel flusso di output e non esistono metodi per leggere i dati. Il flusso di output può essere reindirizzato a qualsiasi destinazione come file e l'output rimarrà lo stesso.

Possiamo eseguire il programma come:

$ java ConsoleAndOut > test.txt

Questo stamperà l'output nel file test.txt .

4. Differenze

Sulla base degli esempi, possiamo identificare alcune differenze:

  • System.console () restituisce un'istanza java.io.Console quando viene eseguita da un terminale interattivo - d'altra parte System.out restituirà l' oggetto java.io.PrintStream indipendentemente dal mezzo di invocazione
  • Il comportamento di System.out e System.console () è simile se non abbiamo reindirizzato alcun flusso; in caso contrario, System.console () restituisce null
  • Quando più thread richiedono un input, la console accoda questi prompt correttamente, mentre nel caso di System.out tutti i prompt vengono visualizzati contemporaneamente

5. conclusione

In questo articolo abbiamo appreso le differenze tra System.console () e System.out . Abbiamo spiegato che Console è utile quando si suppone che un'applicazione venga eseguita da una console interattiva, ma presenta alcune stranezze che dovrebbero essere annotate e risolte.

Come sempre, il codice completo di questo articolo è disponibile su GitHub.