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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 苏格拉底的弟子 于 2012-1-7 23:03 编辑

还有 public static final InputSteam in  这个是字段里面的   都该怎么理解

4 个回复

倒序浏览
本帖最后由 林晓波 于 2012-1-7 23:14 编辑

system.in是inputstream的一个对象
public static final InputStream in是“标准”输入流。此流已打开并准备提供输入数据。此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
system.in是inputstream的一个对象
此流对应于键盘输入或者由主机环境或用户指定的另一个输入源
此流已打开并准备提供输入数据

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
说起来有点小复杂:
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类的方法就可以了。
回复 使用道具 举报 1 0
没有new,怎么会生成对象?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马