新人学习这个感觉这个很特殊,API里面这么写:
public static final PrintStream out“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
底层是这样的, public final static PrintStream out = nullPrintStream();
private static PrintStream nullPrintStream() throws NullPointerException {
if (currentTimeMillis() > 0) {
return null;
}
throw new NullPointerException();
}
那么问题来了,
1.感觉这样定义很奇怪,虽然很好理解,但是为什么这样定义字段呢,好处在哪呢,直接写成一个类.方法(System.outPrint())这样不好么,设计的思想是什么?
2.就算这样写,底层代码里是怎么进行实现的呢?定义了一个字段,然后调用了一个方法,就OK了么?表示翻了一会没看到。
3.比如我自己写个TestPrint类,里面也写这样的字段
public class TestPrint
{
public static final PrintStream out=System.out;
public static void main(String[] args)
{
TestPrint.out.println("abc");
}
}
但是能不能不用System.out,实现控制台输出呢?
新人求指教。
------解决思路----------------------
1. System 是一些对象的集合,而不是一些功能的集合,你的那个想法不太oop
2. 这篇文章比啥都强讲的很详细 http://luckytoilet.wordpress.com/2010/05/21/how-system-out-println-really-works/
3. FileDescriptor.out
------解决思路----------------------
确实是对象的集合,不过要知道这样有一个成员变量的话,就可以”替换“它了。System 允许我们把默认的 out 变量替换成指向其它的地方,而不是控制台显示器啥的。如果是不用这个而是一个方法的话这个类就需要重新设计才能达到这要求了。