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

我见过一些代码,如:

out.println("print something"); 

我试过import java.lang.System;

但它不工作。 你如何使用out.println()

静态导入有诀窍:

 import static java.lang.System.out; 

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

 import static java.lang.System.*; 

@Steve C的附录:请注意,@sfussenegger在对我的答复发表评论时这样说。

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

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

 PrintStream out = System.out; out.println( "hello" ); 

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

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

  System.out.println(...); 

并不是

  out.println(...); 

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

  • 它打破了公认的习惯用法
  • 这使得追踪testing过程中添加的不需要的痕迹打印变得更加困难,而且不会被删除。

如果你发现自己做了很多的输出到System.out或System.err,我认为把stream抽象成属性,局部variables或方法会更好。 这将使您的应用程序更加可重用。

那么,你通常会使用

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

这不需要任何import。 但是,由于out是System内部的静态字段,因此可以使用如下所示的静态导入:

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

看看这个链接 。 通常情况下,只有在使用特定类的很多静态方法时才会这样做,例如我一直使用junit断言和easymock。

outSystem类的静态variables(对象)的PrintStreamtypes, println()PrintStream类的函数。

 class PrintStream { public void println(){} //member function ... } class System { public static final PrintStream out; //data member ... } 

这就是为什么静态variables(对象) out是用类名System访问的,它进一步调用PrintStream (它是一个类)types的方法println() )。

你将不得不先创build一个对象。 更多关于这里:

  // write to stdout out = System.out; out.println("Test 1"); out.close(); 

你可以看到这也在套接字…

 PrintWriter out = new PrintWriter(socket.getOutputStream()); out.println("hello"); 

只需导入:

 import static java.lang.System.*; 

或者干脆:

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