默认情况下 System.in 指的是什么?

What does System.in refer to by default?

read() 方法在 InputStream class 中声明为抽象方法。但是我们可以使用 System.in.read().

从键盘读取

我的问题是 'in' 是 InputStream class 的引用。所以要使用 read() 方法必须引用 InputStream.

的一些子 class

默认情况下,“in”指的是什么class?我们可以编写代码来找到这个问题的答案吗?

正如您在源代码中看到的那样,它是一个 BufferedInputStream:

private static void initializeSystemClass() {
    props = new Properties();
    initProperties(props);
    VM.saveAndRemoveProperties(props);
    lineSeparator = props.getProperty("line.separator");
    Version.init();
    FileInputStream arg = new FileInputStream(FileDescriptor.in);
    FileOutputStream arg0 = new FileOutputStream(FileDescriptor.out);
    FileOutputStream arg1 = new FileOutputStream(FileDescriptor.err);
    setIn0(new BufferedInputStream(arg));
    setOut0(newPrintStream(arg0, props.getProperty("sun.stdout.encoding")));
    setErr0(newPrintStream(arg1, props.getProperty("sun.stderr.encoding")));
    loadLibrary("zip");
    Terminator.setup();
    VM.initializeOSEnvironment();
    Thread arg2 = Thread.currentThread();
    arg2.getThreadGroup().add(arg2);
    setJavaLangAccess();
    VM.booted();
}

回答您的具体问题:是的,您可以通过编写代码找出System.in的class。

这是您正在寻找的应用程序:

public class SystemDotInClassFinder {
    public static void main(String[] args) {
        System.out.println(System.in.getClass().getName());
    }
}

运行 这个脚本产生:

java.io.BufferedInputStream