微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 中 System 类的 out 对象是什么时候初始化的?

如何解决Java 中 System 类的 out 对象是什么时候初始化的?

修改final 的变量必须在声明或执行构造函数时初始化。

查了一下System Class File,发现out对象是在private static void initializeSystemClass()方法中初始化的,这个方法什么时候调用

解决方法

此方法由 JVM 根据 System 类中的注释调用。在下面添加了部分评论:

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();
    }

    /** Don't let anyone instantiate this class */
    private System() {
    }
,
private static native void registerNatives();
static { registerNatives();
}

在 System.java 文件中,我们可以在标题行中看到这段代码。它调用 registerNatives 方法,它会让虚拟机调用 initializeSystemClass 方法来初始化系统类。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。