2015-10-24 122 views
0

我试图提高我对IO的理解。据我了解,'in'是System类的成员变量。system.in包含什么内容?

我相信这是参考变量由于其类型是如在http://docs.oracle.com/javase/7/docs/api/java/lang/System.html

提到“的InputStream”然而,“的InputStream”是一个抽象类,因此它不能被实例化。

我已经做了一些测试并得出结论,尽管您不能实例化抽象类,但可以创建抽象类类型的引用变量。所以我的第一个问题是这个目的,如果没有,为什么它被允许?

Example: 

abstract class Someclass { 
; 
} 

Someclass variable; // A field member of some another class. What purpose could it serve? 

因此,这里是我的第二批相关问题。 system.in变量包含(或引用)是什么?它肯定不是

InputStream in = new InputStream();

因为它是一个抽象类。这是否意味着它有一个子类的实例?如果是这样,哪一个?有没有办法在线查看现场常用变量和方法的“主体”?

感谢您的帮助。

编辑:重复的建议无法解决问题。我唯一能理解的是InputStream可能是用BufferedStream类实例化的。

下面的问题仍然站立:

1)是否有办法在网上观看现场流行的变量和方法的“体”? 2)为什么允许抽象类的引用以及它的目的是什么?

3)和新的问题,即上涨的建议序列 - 这是为什么呢InputStream in = new BufferedStream()代替BufferedStream in = new BufferedStream()

+0

'System.in'引用InputStream'的实现,它通常从键盘输入外部世界的输入,但输入可以通过其他方式输入(通常称为stdin) – MadProgrammer

+0

[什么是抽象类的目的是什么?](http://stackoverflow.com/questions/2288467/what-is-the-purpose-of-abstract-classes) – Andreas

+0

[System.in属于哪个输入类,以及为什么?](http://stackoverflow.com/questions/32051872/what-input-class-does-system-in-belongs-to-and-why) – ApproachingDarknessFish

回答

0

System.in是通常连接到控制台程序的键盘输入的InputStream。由于数据通常通过命令行参数或配置文件传递给命令行Java应用程序,因此System.in并不经常使用。在使用GUI的应用程序中,应用程序的输入通过GUI提供。这是一个独立于Java IO的输入机制。系统本身是java.lang包中的公共final类,它包含多种输入,输出和错误输出方法。

+0

谢谢,但我的问题不是它做什么,它的作用或受欢迎程度,而是如何实现+关于EDIT下参考变量的一些额外问题 – Sam

1

对于这个问题

3),而且上涨的建议序列中的新问题 - 为什么是它的InputStream在=新BufferedStream(),而不是 BufferedStream在=新BufferedStream()

阅读有关依赖注入的内容。

对于

2)为什么允许做抽象类的引用,什么是它的目的是什么?

我只能从我的知识,说的是:通过定义,我们不能创建抽象类的实例,但我们可以利用现有的。因为它可能仍然有数据成员和数据变量。由于这些数据成员可能不是静态的,我们需要一个名称引用来访问它。

你的问题1不清楚。但如果想从.class文件中查看源代码,请阅读有关反编译器的信息。 Java随附它。