49

我看过一些代码,例如:

out.println("print something");

我试过import java.lang.System;

但它不起作用。你怎么用out.println()

4

9 回答 9

98

静态导入可以解决问题:

import static java.lang.System.out;

或者使用导入每个静态方法和字段

import static java.lang.System.*;

@Steve C 的附录:请注意 @sfussenegger 在对我的回答的评论中说了这一点。

“使用 System.out 的这种静态导入仅适用于简单的运行一次代码。”

所以请不要以为他(或我)认为这个解决方案是良好实践。

于 2010-03-23T22:37:15.970 回答
28
PrintStream out = System.out;
out.println( "hello" );
于 2010-03-23T22:34:47.047 回答
17

@sfussenegger 的回答解释了如何进行这项工作。但我会说不要这样做

经验丰富的 Java 程序员使用,并期望看到

        System.out.println(...);

并不是

        out.println(...);

System.out 或 System.err 的静态导入是(IMO)不好的风格,因为:

  • 它打破了公认的成语,并且
  • 它使追踪在测试期间添加但未删除的不需要的痕迹打印变得更加困难。

如果您发现自己对 System.out 或 System.err 进行了大量输出,我认为将流抽象为属性、局部变量或方法会更好。这将使您的应用程序或库更易于维护和更可重用。

(显然,如果您的 Java 程序是一次性的东西,您打算在完成当前任务后丢弃,那么可维护性就不是问题。但另一方面是“丢弃”代码通常不会被丢弃.)

于 2010-03-23T23:26:10.433 回答
6

好吧,您通常会使用

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 一样。

于 2010-03-23T22:38:57.433 回答
3

outPrintStream类的一种静态变量(对象),是Systemprintln()的函数PrintStream

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

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

这就是为什么out使用类名访问静态变量(对象)的原因,该类名System进一步调用了println()它的类型PrintStream(这是一个类)的方法。

于 2013-01-30T17:24:14.860 回答
2

您必须先创建一个对象更多关于这里的信息:

    // write to stdout
    out = System.out;
    out.println("Test 1");
    out.close();
于 2010-03-23T22:35:50.380 回答
1

您也可以在套接字中看到这一点...

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

out.println("hello");
于 2012-08-27T13:58:56.140 回答
1

只需导入:

import static java.lang.System.*;
于 2013-10-13T23:35:55.047 回答
0

或者简单地说:

System.out.println("Some text");
于 2010-03-23T22:38:59.957 回答