我想知道在
System.out.println()
中,out
变量是否在System
类的静态块中初始化。 out
字段被声明为final static变量,其等于null(public final static PrintStream out = null;
)。由于out
指向null,我假设它在某个地方指向PrintStream
对象。但是除了一个名为registerNatives()
的本地方法之外,我看不到代码。它是否在本地方法中被指向?这样做有什么性能优势吗?
此外,在System
的文档中,对out
变量的描述如下:
谢谢。“标准”输出流。该流已经打开并准备好接受输出数据。通常,该流对应于由主机环境或用户指定的显示输出或其他输出目标。”
out
只是在不同的平台上有所不同。因此,在Java中初始化它没有任何意义。每个平台都必须根据其相应的架构创建对象。 - Gaktanout
进行了一些特殊处理。例如,如果out
是final
,那么你如何调用System.setOut()
呢?答案是它并不是真正的final,JVM已经硬编码忽略了这个修饰符(虽然分配仍然是线程安全的--这也是硬编码实现的)。 - markspace