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。
out
是System
类的静态variables(对象)的PrintStream
types, 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");