如何解决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 举报,一经查实,本站将立刻删除。