关于System.out字段的求解

Leafact 2014-12-15 10:59:35
新人学习这个感觉这个很特殊,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,实现控制台输出呢?
新人求指教。
...全文
293 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
humanity 2014-12-19
  • 打赏
  • 举报
回复
确实是对象的集合,不过要知道这样有一个成员变量的话,就可以”替换“它了。System 允许我们把默认的 out 变量替换成指向其它的地方,而不是控制台显示器啥的。如果是不用这个而是一个方法的话这个类就需要重新设计才能达到这要求了。
引用 8 楼 leafact 的回复:
[quote=引用 6 楼 yktd26 的回复:] [quote=引用 5 楼 leafact 的回复:] [quote=引用 4 楼 yktd26 的回复:] 1. System 是一些对象的集合,而不是一些功能的集合,你的那个想法不太oop 2. 这篇文章比啥都强讲的很详细 http://luckytoilet.wordpress.com/2010/05/21/how-system-out-println-really-works/ 3. FileDescriptor.out
打不开貌似[/quote] 转载[/quote]看的不是很懂,不过来时谢谢了[/quote]
Leafact 2014-12-18
  • 打赏
  • 举报
回复
引用 6 楼 yktd26 的回复:
[quote=引用 5 楼 leafact 的回复:] [quote=引用 4 楼 yktd26 的回复:] 1. System 是一些对象的集合,而不是一些功能的集合,你的那个想法不太oop 2. 这篇文章比啥都强讲的很详细 http://luckytoilet.wordpress.com/2010/05/21/how-system-out-println-really-works/ 3. FileDescriptor.out
打不开貌似[/quote] 转载[/quote]看的不是很懂,不过来时谢谢了
iversonfor2 2014-12-18
  • 打赏
  • 举报
回复
我只知道是输出到控制台,,
Leafact 2014-12-16
  • 打赏
  • 举报
回复
快来人啊,这里有人晕倒了
yktd26 2014-12-16
  • 打赏
  • 举报
回复
引用 5 楼 leafact 的回复:
[quote=引用 4 楼 yktd26 的回复:] 1. System 是一些对象的集合,而不是一些功能的集合,你的那个想法不太oop 2. 这篇文章比啥都强讲的很详细 http://luckytoilet.wordpress.com/2010/05/21/how-system-out-println-really-works/ 3. FileDescriptor.out
打不开貌似[/quote] 转载
Leafact 2014-12-16
  • 打赏
  • 举报
回复
引用 4 楼 yktd26 的回复:
1. System 是一些对象的集合,而不是一些功能的集合,你的那个想法不太oop 2. 这篇文章比啥都强讲的很详细 http://luckytoilet.wordpress.com/2010/05/21/how-system-out-println-really-works/ 3. FileDescriptor.out
打不开貌似
yktd26 2014-12-16
  • 打赏
  • 举报
回复
1. System 是一些对象的集合,而不是一些功能的集合,你的那个想法不太oop 2. 这篇文章比啥都强讲的很详细 http://luckytoilet.wordpress.com/2010/05/21/how-system-out-println-really-works/ 3. FileDescriptor.out
soton_dolphin 2014-12-15
  • 打赏
  • 举报
回复
引用 1 楼 soton_dolphin 的回复:
out 是System 类里面的一个类变量,是PrintStream的一个实力。模拟显示器。所以System.out 只是用来向显示器断输出字符。 这是java里唯一的控制台输出,不需要自己写程序。 当然你也可以在System.out 的基础上写符合自己需求的控制台输出
这样写的还一个好处就是利用Aggregation 的形式来重用写好的方法
soton_dolphin 2014-12-15
  • 打赏
  • 举报
回复
out 是System 类里面的一个类变量,是PrintStream的一个实力。模拟显示器。所以System.out 只是用来向显示器断输出字符。 这是java里唯一的控制台输出,不需要自己写程序。 当然你也可以在System.out 的基础上写符合自己需求的控制台输出

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧