Java out.println()这怎么可能?

use*_*514 46 java printing libraries

我见过一些代码如:

out.println("print something");
Run Code Online (Sandbox Code Playgroud)

我试过了 import java.lang.System;

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

sfu*_*ger 86

静态导入可以解决问题:

import static java.lang.System.out;
Run Code Online (Sandbox Code Playgroud)

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

import static java.lang.System.*;
Run Code Online (Sandbox Code Playgroud)

@Steve C的附录:请注意@sfussenegger在对我的答案的评论中这样说.

"使用System.out的这种静态导入不仅仅适用于简单的一次性运行代码."

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

  • 在大多数情况下,无论如何它都会为您修复它,在eclipse中进行organize导入,它将更改您的java.lang.System。*; 到java.lang.System.out; 为你(假设你只是用光了) (2认同)

tan*_*ens 26

PrintStream out = System.out;
out.println( "hello" );
Run Code Online (Sandbox Code Playgroud)


Ste*_*n C 16

@sfussenegger的回答解释了如何使这项工作.但我会说不要这样做!

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

        System.out.println(...);
Run Code Online (Sandbox Code Playgroud)

并不是

        out.println(...);
Run Code Online (Sandbox Code Playgroud)

System.out或System.err的静态导入是(IMO)错误样式,因为:

  • 它破坏了公认的习语,并且
  • 它使得更难以追踪在测试期间添加并且未被删除的不需要的跟踪打印.

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

  • 我同意缺少“系统”。乍一看可能会令人困惑。使用局部变量或属性并不会真正改变任何东西,不是吗?使用本地“protected void println(Object o) { System.out.println(o);}”可能是一个好主意,因为输出目的地很容易更改,例如“log.info(o)” 。 (2认同)

Cas*_*sey 6

嗯,你通常会使用

System.out.println("print something");
Run Code Online (Sandbox Code Playgroud)

这不需要任何进口.但是,由于out是System内部的静态字段,您可以编写使用静态导入,如下所示:

import static java.lang.System.*;

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

看看这个链接.通常,只有在使用特定类的许多静态方法时才会这样做,比如我一直使用junit asserts和easymock.