Java对象类,构造函数链接

Java对象类,构造函数链接,java,object,Java,Object,Java中的每个对象创建都会调用此代码,因为每个对象都扩展了对象吗?或者JVM是否以某种方式对其进行了优化,以避免在堆中创建一些多个对象的对象 在这个方法中到底发生了什么registerNatives() package java.lang; public class Object { private static native void registerNatives(); static { registerNatives(); } 加载类时,静态块只执行一次 正如

Java中的每个对象创建都会调用此代码,因为每个对象都扩展了对象吗?或者JVM是否以某种方式对其进行了优化,以避免在堆中创建一些多个对象的对象

在这个方法中到底发生了什么registerNatives()

package java.lang;  

public class Object {
  private static native void registerNatives();
  static {
    registerNatives();
  }

加载类时,静态块只执行一次


正如或所解释的,每次初始化类的对象时将执行的块也可以定义:只需删除
static
关键字。

不管
registerNatives()做什么。
。这里重要的是,您已经将它封闭在静态块中。java类加载器加载类时加载并运行静态块。因此,它保证每个JVM只运行一次

1。这里的问题不是关于构造函数链接,而是关于静态。

2。静态变量将在JVM加载类时初始化,JVM在实例化类或调用该类的任何静态方法时加载类。


3。因此,每当JVM加载类时,此静态块将运行。

此代码不会编译。:)不,不是我的代码。这是从Jdk源代码复制而来的。您的可能副本似乎令人困惑。静态块将在JVM第一次加载object类型的对象(严格来说,不包括子类)时运行。但若加载了另一个类型,即使它扩展了对象,它也不会运行。