黑马程序员技术交流社区

标题: InputStream in = System.in 这段代码怎么理解? [打印本页]

作者: 苏格拉底的弟子    时间: 2012-1-7 23:00
标题: InputStream in = System.in 这段代码怎么理解?
本帖最后由 苏格拉底的弟子 于 2012-1-7 23:03 编辑

还有 public static final InputSteam in  这个是字段里面的   都该怎么理解
作者: 林晓波    时间: 2012-1-7 23:05
本帖最后由 林晓波 于 2012-1-7 23:14 编辑

system.in是inputstream的一个对象
public static final InputStream in是“标准”输入流。此流已打开并准备提供输入数据。此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
作者: lvwenwen88    时间: 2012-1-9 10:43
system.in是inputstream的一个对象
此流对应于键盘输入或者由主机环境或用户指定的另一个输入源
此流已打开并准备提供输入数据
作者: 王_涛    时间: 2012-1-13 19:51
说起来有点小复杂:
in在System类中的声明方式为“public static final InputStream in”,也就是说in是一个static的field,即in属于System这个类,而不属于某个System类的对象,实际是因为System是用final修饰的,所以你也不可能用new关键字来创建出一个System类的对象。所以,要访问in这个InputStream类型的对象,你只能用System.in这样的方式,而且用System.in这样的方式访问到的就是一个普通的InputStream类型的对象,你可以调用InputStream类里的所有实例方法(没有static修饰的方法),也可以调用InputStream类里的所有类方法(但是用对象来调用类方法是不建议这样子操作的)
InputStream类中的read方法是abstract的,但是我们通过System.in得到的不是一个直接的InputStream对象,InputStream类本身为abstract的,你也不可能创建出这个类的一个对象来,实际上,我们通过System.in得到的是某一个InputStream的子类的对象,这就是java中多态的概念,即父类的变量可以引用子类的对象。查看一下java的源文件就可以知道这个in是通过native code得到的,所以你不用过分关心它到底是什么类型的,只要知道它就是一个InputStream类的子类的对象,我们可以通过它使用所有InputStream类的方法就可以了。
作者: 莞漂族    时间: 2014-5-24 23:25
没有new,怎么会生成对象?




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