1

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

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

package java.lang;  

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

3 回答 3

2

静态块仅在加载类时执行一次。

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

于 2012-07-27T09:52:46.407 回答
1

做什么都没关系registerNatives().。这里重要的是您已将其包含在静态块中。当 java Class Loader 加载类时加载并运行静态块。因此保证每个 JVM 只运行一次。

于 2012-07-27T09:58:37.683 回答
0

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

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

3.所以这个静态块会在 JVM 每次加载类时运行一次。

于 2012-07-27T10:15:45.910 回答