查看System.out.println的内部代码,想了解它是如何工作的吗?



我刚刚下载了jdk的源代码,我对System.out.println函数感兴趣

。通过查看java.lang中的类System,我了解了这一部分:

public final class System {
public final static PrintStream out = null;

在 java.io 中,类 PrintStream 是这样声明的:

public class PrintStream extends FilterOutputStream
implements Appendable, Closeable {
public void println() {

所以如果我们在主函数中调用函数 System.out.println((

如果 out 对象为空,怎么会发生这种情况。为什么没有java.lang.NullPointerException。此外,类 PrintStream 不是静态的,以防止对象的实例化。

我真的是java的初学者,所以请用我在这里缺少的部分来启发我

谢谢

System类有一个静态块,用于调用registerNatives方法,这是一个本机方法。源代码中有以下注释:

VM 将调用初始化系统类方法来完成 此类的初始化与 clinit 分离。 请注意,若要使用 VM 设置的属性,请参阅约束 在初始化系统类方法中描述。

因此,当从静态块调用registerNatives时,上面注释中提到的initializeSystemClass方法由 JVM 调用。此方法对out字段具有初始化功能。

在类加载期间调用静态块。因此,您可以确定,无论何时从代码调用System.out.println,都已调用此静态块,并且已初始化out字段。

最新更新