System.out的初始值为null,为啥使用System.out.println()时系统不报空指针异常呢?

不理解啊。。。以下是API中PrintStream中的成员变量out

    public final static PrintStream out = null;
阅读 4.6k
2 个回答
public final class System {

    /* register the natives via the static initializer.
     *
     * 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.
     */
    private static native void registerNatives();
    static {
        registerNatives();
    }

看下System的源码,有初始化方法啊...

System.out这个值其实可以由System.setOut()这个方法来设定的,它其实是个native的方法。
Java代码前面加了final只是让用户无法赋值而已。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题