Вы сейчас просматриваете System.out.println() – почему так сложно?

System.out.println() – почему так сложно?

Почему в Java команда для печати чего-то в консоль выглядит так сложно? Ведь в других языках она выглядит гораздо проще и естественнее. Класс System – он какие объекты содержит? out – это метод? Или что-то другое?

Давайте с этим разберемся!

1. Что такое System?

System — это класс в пакете java.lang. Это утилитарный класс, который предоставляет доступ к системным ресурсам и возможностям. Он содержит:

Полезные статические методы, например:

• System.currentTimeMillis() — возвращает текущее время в миллисекундах.

• System.gc() — запускает сборщик мусора.

Статические поля, например:

• System.out — стандартный поток вывода.

• System.err — стандартный поток ошибок.

• System.in — стандартный поток ввода.

2. Что такое out?

out — это статическое поле класса System, которое содержит объект типа PrintStream. Этот объект отвечает за вывод текстовой информации в консоль. По умолчанию он связан с консолью, но может быть перенаправлен на другой поток вывода.

Если упрощенно, то System.out — это поток, в который программа пишет вывод.

3. А println() — это метод?

Да, println() — это метод класса PrintStream. Он отвечает за вывод строки с переводом строки в конце. В PrintStream есть несколько вариантов этого метода, которые позволяют выводить:

• Текстовые строки (String),

• Числа (int, double и т.д.),

• Логические значения (boolean),

• Другие объекты (вызывается метод toString() объекта).

Когда мы пишем:

System.out.println(“Привет, мир!”);

это означает:

1. Обратиться к классу System.

2. Взять его статическое поле out (а в этом поле содержится объект типа PrintStream).

3. Вызвать метод println() для этого объекта, чтобы вывести строку в консоль.

4. Почему это выглядит сложно?

Это не сложно, а гибко:

• Мы используем статический класс и поле (System.out), что делает их доступными в любом месте программы без необходимости создавать объект.

• System.out — это поток вывода, который вы можете перенаправить (например, в файл), не меняя сам код программы.

• Методы println(), print() и другие позволяют работать с разными типами данных.

Пример с переопределением System.out для вывода в файл, а не в консоль:

import java.io.PrintStream;
import java.io.FileOutputStream;

public class RedirectOutput {
    public static void main(String[] args) throws Exception {
        // Перенаправляем System.out в файл
        PrintStream fileOut = new PrintStream(new FileOutputStream("output.txt"));
        System.setOut(fileOut);
        
        System.out.println("Эта строка попадет в файл, а не в консоль!");
        fileOut.close();
    }
}

Выводы:

• System — класс, предоставляющий доступ к системным ресурсам.

• out — статическое поле класса System, которое является объектом типа PrintStream.

• println() — метод этого объекта, который отвечает за вывод данных.

И да, этот код чуть длиннее, но зато намного гибче.

Leonid Kleimann

I like Java!