System.in如何工作?

时间:2018-10-01 07:38:14

标签: java system.in

我对System类在哪里具有InputStream类型的静态字段in感到怀疑。 InputStream是一个抽象类。 Java文档说System.in stream is already open and ready to supply input data.

在实现抽象类之前,不能对其进行初始化。但是Input流已经由AudioInputStream,ByteArrayInputStream,FileInputStream,FilterInputStream等各种类实现。因此,当我们使用System.in时,哪个类的对象被实例化?否则,它会创建任何匿名类吗?

请分享您的看法..!

1 个答案:

答案 0 :(得分:3)

System.in关联的对象的类是InputStream的子类。没有指定更多内容 1

但我们可以对其进行测试:

$ cat Test.java
public class Test {
  public static void main(String[] args) {
    System.out.println(System.in.getClass());
  }
}
$ javac Test.java 
$ java Test 
class java.io.BufferedInputStream
$ 

当然,从一个Java版本到另一个Java版本,这可能会有所不同。以上是针对Java 8的。


1-由于未指定用于System.in的类,因此不建议编写依赖于经验观察似乎总是使用同一类的代码。但是,我不希望提供Java实现的人员更改此详细信息...因为人们可能会可以将类的知识硬连线到他们的代码中。