黑马程序员技术交流社区

标题: 关于System.out.print( ) 问题 [打印本页]

作者: Destiny    时间: 2012-3-21 20:33
标题: 关于System.out.print( ) 问题
对于“System.out.print( );” 有些疑问: out是Printstream类型的,这个我清楚。而且print()方法是在PrintStream类中定义的,这个我也清楚。但是我有个地方不明白:这些在PrintStream类中定义的print( )方法都是非static的,为什么可以正确的由out直接调用而没有抛出“空引用”的异常呢 ?
作者: 陈从宾    时间: 2012-3-21 20:48
其实您调用System.out你得到的是一个Printstream类型的对象,因为print()方法是在PrintStream类中定义的,所以对print()方法的调用其实相当于Printstream类型的对象对该对象中的成员函数的调用
作者: 陈汉帆    时间: 2012-3-21 20:49
out是Printstream的实例对象,那么由out直接调用应该不会抛出“空引用”吧
作者: 杨波    时间: 2012-3-21 21:43
看java API文档,out是System类的一个字段,返回值是静态PrintStream 对象:
out,
     public static final PrintStream out“标准”输出流。此流已打开并准备接受输出数据。
通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
这样就可以解决lz疑问,当我们写到 System.out 时就已经得到了一个PrintStream 对象,继而调用PrintStream 对象的print()方法。
其实System.out.print( );可以这样写:
PrintStream  ps = System.out ;
ps.println("heima");



作者: 周建    时间: 2012-3-21 22:12
out是printStream类型的类变量,指向一个已经打开的流,同时该变量又是定义在System类中的固定的字段摘要,且是静态的,所以可以写成System.out形式,println是print中的非静态方法
,printStream创建的对象调用。System.out.println(data);是正确而且标准的写法
作者: 张锐    时间: 2012-3-22 17:11
LZ的这个问题我以前也想过,今天专门翻了下源码,写了篇总结,大家交流下。

http://www.cnblogs.com/zr-714/archive/2012/03/22/2411926.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2