我开始怀疑 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/