我只是想知道System.out.println()
中的out
变量是否在System
类的静态块中初始化。out
字段被声明为最终静态变量,等于空(public final static PrintStream out = null;
)。由于 out 指向 null,我假设它指向某处的PrintStream
对象。但是除了一个名为 registerNatives()
的本机方法外,我看不到代码。它是否在本机方法中被指向?为什么这样做(任何性能优势)?此外,System
中 out
变量的文档说:
"标准"输出流。此流已打开,可以接受输出数据。通常,此流对应于主机环境或用户指定的显示输出或其他输出目标。
谢谢。
参考 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
类成员。