java - System.in 是如何工作的?

标签 java system.in

我开始怀疑 System 类在何处具有 InputStream 类型的静态字段 in。 InputStream 是一个抽象类。 Java 文档说,System.in 流已经打开并准备好提供输入数据。

抽象类在实现之前不能被初始化。但是输入流已经被各种类实现了,比如AudioInputStream、ByteArrayInputStream、FileInputStream、FilterInputStream等。那么当我们使用System.in时,哪个类的对象被实例化了?或者,如果没有,它会创建任何匿名类吗?

请分享您的观点..!

最佳答案

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 8 的。


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

关于java - System.in 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52586501/

相关文章:

Java多线程纠错——线程安全单例

JavaFX 小行星游戏克隆 : Having trouble bouncing asteroids off eachother

java - Android自定义用户界面实现错误

java - 如何使多个基于文本的 java 菜单工作?

Netty客户端的Java输入

java - 如何在 java 中为事件监听器模式创建并触发 Consumers<T> 集合

java - Java 中带有键绑定(bind)的 keyReleased() 方法?

java - 为什么 Java 不在这里打印 last word?

java - 使用 Scanner(System.in) Java 将每个单词大写

java - System.in 无法与 Scanner 配合使用 (NoSuchElementException)