Java out.println () как это возможно? - PullRequest
44 голосов
/ 24 марта 2010

Я видел такой код, как:

out.println("print something");

Я пытался import java.lang.System;

но это не работает. Как вы используете out.println()?

Ответы [ 9 ]

85 голосов
/ 24 марта 2010

Статический импорт делает свое дело:

import static java.lang.System.out;

или, в качестве альтернативы, импортируйте каждый статический метод и поле, используя

import static java.lang.System.*;

Приложение от @Steve C: обратите внимание, что @sfussenegger сказал это в комментарии к моему ответу.

"Использование такого статического импорта System.out не подходит для более чем простого однократного выполнения кода."

Поэтому, пожалуйста, не думайте, что он (или я) считает, что это решение - Хорошая практика.

26 голосов
/ 24 марта 2010
PrintStream out = System.out;
out.println( "hello" );
16 голосов
/ 24 марта 2010

@ Ответ sfussenegger объясняет, как заставить это работать. Но я бы сказал не делай этого !

Опытные Java-программисты используют и ожидают увидеть

        System.out.println(...);

а не

        out.println(...);

Статический импорт System.out или System.err является (IMO) плохим стилем, потому что:

  • нарушает принятую идиому, а
  • затрудняет отслеживание нежелательных отпечатков, которые были добавлены во время тестирования и не удалены.

Если вы обнаружите, что делаете много выходных данных для System.out или System.err, я думаю, что лучше абстрагировать потоки в атрибуты, локальные переменные или методы. Это сделает ваше приложение более пригодным для повторного использования.

6 голосов
/ 24 марта 2010

Ну, вы обычно используете

System.out.println("print something");

, который не требует импорта. Однако, поскольку out является статическим полем внутри System, вы можете написать, используя статический импорт, например так:

import static java.lang.System.*;

class Test {
    public static void main(String[] args) {
        out.println("print something");
    }
}

Взгляните на эту ссылку . Обычно вы делаете это только в том случае, если вы используете много статических методов из определенного класса, как, например, я все время использую его для утверждений junit и easymock.

3 голосов
/ 30 января 2013

out - это тип PrintStream статической переменной (объекта) класса System, а println() - функция класса PrintStream.

class PrintStream
{
    public void println(){}    //member function
    ...
}

class System
{
    public static final PrintStream out;   //data member
    ...
}

Именно поэтому к статической переменной (объекту) out осуществляется доступ с именем класса System, которое дополнительно вызывает метод println() ее типа PrintStream (который является классом).

1 голос
/ 14 октября 2013

просто импортируйте:

import static java.lang.System.*;
1 голос
/ 27 августа 2012

это можно увидеть и в розетках ...

PrintWriter out = new PrintWriter(socket.getOutputStream());

out.println("hello");
1 голос
/ 24 марта 2010

Сначала вам нужно будет создать объект из . Подробнее об этом здесь:

    // write to stdout
    out = System.out;
    out.println("Test 1");
    out.close();
0 голосов
/ 24 марта 2010

Или просто:

System.out.println("Some text");
...