【问题标题】:What does system.in contain?system.in 包含什么?
【发布时间】:2015-10-24 03:44:52
【问题描述】:

我正在努力提高我对 IO 的理解。据我了解,'in' 是 System 类的成员变量。

我相信它是一个引用变量,因为它的类型是 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()

【问题讨论】:

标签: java class io reference


【解决方案1】:

问题

3.) 作为一系列建议提出的新问题 - 为什么是 InputStream in = new BufferedStream() 而不是 BufferedStream in = new BufferedStream()

阅读依赖注入。

对于

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

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

您的问题 1 不清楚。但如果想从 .class 文件中查看源代码,请阅读反编译器。并且附带了 Java。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,但我的问题不是它的作用、它的作用或受欢迎程度,而是它是如何实现的 + 关于 EDIT 下面的参考变量的一些其他问题
    猜你喜欢
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多