1. Введение
В этом руководстве мы рассмотрим различия между System.console()
и System.out
.
2. Система.консоль()
Давайте сначала создадим программу для получения объекта Console :
void printConsoleObject() {
Console console = System.console();
console.writer().print(console);
}
Запуск этой программы из интерактивного терминала выведет что-то вроде java.io.Console@546a03af.
Однако запуск его с других носителей вызовет исключение NullPointerException
, поскольку объект консоли будет иметь значение null
.
Или, если мы запустим программу, как показано ниже:
$ java ConsoleAndOut > test.txt
тогда программа также выдаст исключение NullPointerException
, поскольку мы перенаправляем поток. ``
Класс Console
также предоставляет методы для чтения паролей без повторения символа.
Давайте посмотрим, что в действии:
void readPasswordFromConsole() {
Console console = System.console();
char[] password = console.readPassword("Enter password: ");
console.printf(String.valueOf(password));
}
Это запросит пароль, и он не будет отображать символы, пока мы его набираем.
3. Системный выход
Давайте теперь распечатаем объект System.out
:
System.out.println(System.out);
Это вернет что-то вроде java.io.PrintStream.
Вывод будет одинаковым из любого места.
System.out
используется для печати данных в выходной поток, и нет никаких методов для чтения данных. Выходной поток может быть перенаправлен в любое место назначения, например в файл, и вывод останется прежним.
Мы можем запустить программу как:
$ java ConsoleAndOut > test.txt
Это напечатает вывод в файл test.txt
.
4. Отличия
На примере примеров можно выделить некоторые отличия:
System.console()
возвращает экземплярjava.io.Console
, когда он запускается из интерактивного терминала — с другой стороны ,System.out
возвращает объектjava.io.PrintStream
независимо от среды вызова.- Поведение
System.out
иSystem.console()
аналогично, если мы не перенаправляли какие-либо потоки; в противном случаеSystem.console()
возвращаетnull
- Когда несколько потоков запрашивают ввод,
консоль
красиво ставит эти запросы в очередь, тогда как в случаеSystem.out
все запросы появляются одновременно.
5. Вывод
В этой статье мы узнали о различиях между System.console()
и System.out
. Мы объяснили, что Консоль
полезна, когда приложение должно запускаться из интерактивной консоли, но у нее есть некоторые особенности, которые следует учитывать и учитывать.
Как всегда, полный код для этой статьи доступен на GitHub .