System.out: примеры (JAVA)
System.out: PrintStreamОписание и назначение System.out
System.out это статическое поле класса java.lang.System, представляющее собой объект типа PrintStream, подключенный к стандартному потоку вывода (консоль). Используется для вывода текстовой информации пользователю.
Основные методы: print (вывод без перевода строки), println (с переводом строки), printf (форматированный вывод), write (вывод байтов), flush (сброс буфера).
Аргументы: print и println принимают один аргумент любого типа (int, float, boolean, char, String, Object и т.д.) или без аргументов (println() выводит пустую строку). printf принимает строку формата и переменное число аргументов.
Возвращаемое значение: print и println возвращают void. printf возвращает PrintStream, что позволяет выстраивать цепочки вызовов.
Примеры использования
System.out.println("Hello, world!");Hello, world!
System.out.print(42);42
System.out.printf("Number: %d, String: %s%n", 10, "test");Number: 10, String: test
System.out.println();(пустая строка)
System.out.println(3.14);3.14
System.out.println(true);true
System.out.println('A');A
Альтернативы в Java
System.err (стандартный поток ошибок) - используется для вывода сообщений об ошибках, не смешивается с обычным выводом. java.util.logging.Logger (гибкое логирование с уровнями, фильтрами, форматированием). Log4j и SLF4J - мощные библиотеки для промышленного логирования. System.out подходит для простых консольных программ и отладки, Logger и Log4j - для серьёзных проектов, где требуется гибкая настройка вывода.
Аналоги в других языках
PHP: echo, print_r, var_dump.
echo "Hello, world!\n";Hello, world!
JavaScript: console.log.
console.log("Hello, world!");Hello, world!
Python: print.
print("Hello, world!")Hello, world!
C#: Console.WriteLine.
Console.WriteLine("Hello, world!");Hello, world!
Go: fmt.Println.
fmt.Println("Hello, world!")Hello, world!
Kotlin: println.
println("Hello, world!")Hello, world!
Lua: print.
print("Hello, world!")Hello, world!
SQL: оператор SELECT выводит результат запроса, но в контексте СУБД, а не консоли.
Типичные ошибки
Неправильный формат в printf. Использование %d для строки:
System.out.printf("%d", "text");java.util.IllegalFormatConversionException
Буферизация без сброса. При использовании write() без перевода строки вывод может не появиться:
System.out.write(65); // 'A'(ничего не отображается до вызова flush())
Непреднамеренный вывод в System.out вместо System.err. Ошибки стоит выводить в System.err, иначе они смешиваются с обычным выводом и их сложнее отделить.
Изменения в версиях Java
Основные методы System.out не претерпели существенных изменений. В Java 5 была добавлена поддержка varargs для printf (хотя сам метод появился ранее). В более поздних версиях (Java 8, 11, 17, 21) поведение осталось стабильным. В Java 18+ улучшена поддержка Unicode в консоли, но это зависит от терминала, а не от самого System.out.
Расширенные примеры
Перенаправление вывода в файл
PrintStream fileStream = new PrintStream(new File("output.txt"));
PrintStream originalOut = System.out;
System.setOut(fileStream);
System.out.println("Текст в файле");
System.setOut(originalOut);
System.out.println("Текст на консоли");В файл записывается "Текст в файле", на консоли появляется "Текст на консоли"
Форматирование с локализацией
System.out.printf(Locale.GERMAN, "Число с запятой: %.2f%n", 1234.56);Число с запятой: 1.234,56
Вывод с ANSI-цветами (поддерживаемые терминалы)
System.out.println("\u001B[31mКрасный текст\u001B[0m");(вывод красного текста)
Вывод массива
int[] arr = {1,2,3};
System.out.println(Arrays.toString(arr));[1, 2, 3]
Использование write для байтов
byte[] data = {72, 101, 108, 108, 111}; // "Hello"
System.out.write(data, 0, data.length);
System.out.println();Hello
Вывод с помощью append
System.out.append("Hello ").append("World!");Hello World!
Многопоточный вывод
new Thread(() -> System.out.println("Thread1")).start();
new Thread(() -> System.out.println("Thread2")).start();(строки выводятся целиком, порядок может меняться)
Прямое использование PrintStream
PrintStream ps = System.out;
ps.println("Прямой вызов");Прямой вызов