System.out.println in Is out 在本机方法中初始化



我只是想知道System.out.println()中的out变量是否在System类的静态块中初始化。out字段被声明为最终静态变量,等于空(public final static PrintStream out = null;)。由于 out 指向 null,我假设它指向某处的PrintStream对象。但是除了一个名为 registerNatives() 的本机方法外,我看不到代码。它是否在本机方法中被指向?为什么这样做(任何性能优势)?此外,Systemout 变量的文档说:

"标准"输出流。此流已打开,可以接受输出数据。通常,此流对应于主机环境或用户指定的显示输出或其他输出目标。

谢谢。

参考 JDK 1.8

出注册流程

Java Virtual Machine (JVM)调用

private static void initializeSystemClass() line-1155

函数调用

setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding"))) at line-1192 调用

实际定义native method

private static native void setOut0(PrintStream out);line-258;

然后setOut0初始化out类成员。

最新更新