【发布时间】:2011-01-31 00:53:26
【问题描述】:
我看过一些代码,例如:
out.println("print something");
我试过import java.lang.System;
但它不起作用。 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 的这种静态导入仅适用于简单的运行一次代码。”
所以请不要以为他(或我)认为这个解决方案是好的做法。
【讨论】:
PrintStream out = System.out;
out.println( "hello" );
【讨论】:
@sfussenegger 的回答解释了如何进行这项工作。但我会说不要这样做!
有经验的 Java 程序员使用,并期望看到
System.out.println(...);
而不是
out.println(...);
System.out 或 System.err 的静态导入是 (IMO) 不好的风格,因为:
如果您发现自己对 System.out 或 System.err 进行了大量输出,我认为最好将流抽象为属性、局部变量或方法。这将使您的应用程序或库更易于维护和重用。
(显然,如果您的 Java 程序是一次性的东西,您打算在完成当前任务后丢弃,那么可维护性就不是问题。但另一方面是“丢弃”代码通常是不要扔掉。)
【讨论】:
protected void println(Object o) { System.out.println(o);} 可能是个好主意,因为输出目标很容易更改,例如 log.info(o)。
嗯,你通常会使用
System.out.println("print something");
不需要任何导入。但是,由于 out 是 System 内部的一个静态字段,您可以像这样编写使用静态导入:
import static java.lang.System.*;
class Test {
public static void main(String[] args) {
out.println("print something");
}
}
看看这个link。通常,只有在使用来自特定类的大量静态方法时才会这样做,例如我一直将它用于 junit 断言和 easymock。
【讨论】:
out 不是方法,而是字段。
out 是 System 类的 PrintStream 类型的静态变量(对象),println() 是 PrintStream 类的函数。
class PrintStream
{
public void println(){} //member function
...
}
class System
{
public static final PrintStream out; //data member
...
}
这就是为什么使用类名System 访问静态变量(对象)out 的原因,这进一步调用了其类型为PrintStream(这是一个类)的方法println()。
【讨论】:
您必须先创建一个对象out。更多关于这里的信息:
// write to stdout
out = System.out;
out.println("Test 1");
out.close();
【讨论】:
System.out 和out 将引用同一个对象,即System.out == out 将是true
您也可以在套接字中看到这一点...
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println("hello");
【讨论】:
只需导入:
import static java.lang.System.*;
【讨论】:
或者简单地说:
System.out.println("Some text");
【讨论】: