【发布时间】:2019-12-04 10:20:35
【问题描述】:
我只是想知道System.out.println() 中的out 变量是否在System 类的静态块中初始化。 out 字段被声明为最终静态变量,它等于 null (public final static PrintStream out = null;)。由于 out 指向 null,我假设它被指向某处的 PrintStream 对象。但除了名为registerNatives() 的本机方法外,我看不到代码。它是否在本机方法中被指出?为什么这样做(任何性能优势)?
此外,System 中 out 变量的文档说:
“标准”输出流。此流已经打开并准备好接受输出数据。通常,此流对应于主机环境或用户指定的显示输出或其他输出目标。"
谢谢。
【问题讨论】:
-
我猜
out只是因平台而异。所以用Java初始化它没有任何意义。然后每个平台必须根据各自的架构创建对象 -
众所周知,JVM 对
out进行特殊处理,例如如果out是final,你怎么能调用System.setOut()呢?答案是它并不是最终的,JVM 已经被硬编码以忽略修饰符(尽管分配仍然是线程安全的——这也是硬编码的)。
标签: java