刚刚下载了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() {
所以如果我们在主函数中调用函数 系统.out.println()
如果 out 对象为空,怎么会发生这种情况。为什么没有 java.lang.NullPointerException。此外,类 PrintStream 不是静态的,以防止对象的实例化。
我真的是 java 的初学者所以请用我在这里缺少的部分启发我
谢谢,
最佳答案
System
类有一个调用 registerNatives
方法的静态 block ,它是一个 native method .源代码中有如下注释:
VM will invoke the initializeSystemClass method to complete the initialization for this class separated from clinit. Note that to use properties set by the VM, see the constraints described in the initializeSystemClass method.
所以当从静态 block 中调用registerNatives
时,JVM会调用上面注释中提到的initializeSystemClass
方法。此方法对 out
字段进行了初始化。
在类加载期间调用静态 block 。因此,您可以确定无论何时从您的代码中调用 System.out.println
,此静态 block 都已被调用并且 out
字段已被初始化。
关于java - 查看 System.out.println 的内部代码想了解它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52354126/