A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马姗姗 中级黑马   /  2014-1-14 16:32  /  943 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马姗姗 于 2014-1-15 15:09 编辑

为什么System.in可以为InputStream实例化对象,System.out可以为OutputStream实例化对象,这个问题有点搞不明白,查了API文档,还是不明白System类和InputStream、OutputStream的关系!

4 个回复

倒序浏览
额  这个有什么不明白的   in 是System类中的一个静态常量  其类型就是InputStream
而in的具体的流 是使用native方法JNI调用的底层的代码获取到的,看看源码就知道了
回复 使用道具 举报
System.out是一个PrintStream的对象,而PrintStream是OutputStream的子类,因此out也就为OutputStream的实例化对象
回复 使用道具 举报
这个挺好明白的。首先我们来看public static final InputStream in
静态的直接用类名调用in,即System.in,这个没错吧
再看返回值类型是InputStream没错吧,所以有InputStream is = System.in;
再看public static final PrintStream out
同理有PrintStream ps = System.out;没错吧,
又因为PrintStream 是OutputStream的子类
所以有OutputStream os = System.out;这里是多态的体现。
回复 使用道具 举报
OutputStream是一个抽象类,而System.out是一个PrintStream的对象。
out为System的一个final属性,在jvm启动的时候会自动执行,创建一个PrintStream对象并赋值给System的out属性。由于PrintStream是OutputStream的子类,因此out也就为OutputStream的实例化对象。这个是面向对象的一个特点。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马