gpt4 book ai didi

java - 在System.java源代码中,标准的输入,输出和错误流被声明为final,并初始化为null?

转载 作者:行者123 更新时间:2023-12-01 18:01:57 25 4
gpt4 key购买 nike

public final static InputStream in = null;
public final static PrintStream out = null;
public final static PrintStream err = null;


但众所周知,这些流默认情况下已连接到控制台,并且已经打开。 System类setIn(),setOut和setErr()中也有用于重定向流的方法。当将它们声明为final并将其设置为初始化值null时,这怎么可能?

我编译了以下代码,在调用println()时设置了一个断点,并使用netbeans进行了调试。我的目标是通过进入源代码来确切确定何时将变量System.in初始化为标准输出。但是,似乎在调用main方法时已经初始化了输出流。

public static void main(String[] args) {
System.out.println("foo");
}

最佳答案

稍后通过本机方法SetIn0SetOut0SetErr0设置它们

private static native void setIn0(InputStream in);
private static native void setOut0(PrintStream out);
private static native void setErr0(PrintStream err);


initializeSystemClass方法调用,根据 JavaDoc调用,该方法在线程初始化后调用。

FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
setIn0(new BufferedInputStream(fdIn));
setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));

关于java - 在System.java源代码中,标准的输入,输出和错误流被声明为final,并初始化为null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60613131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com