Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Java 中的每个对象创建都会调用此代码,因为每个对象都扩展Object吗?或者JVM是否以某种方式对其进行优化以避免在堆中创建一些许多Object的对象。
这个方法registerNatives()到底发生了什么 。
package java.lang; public class Object { private static native void registerNatives(); static { registerNatives(); }
静态块仅在加载类时执行一次。
如here或here所解释的,也可以定义每次初始化类的对象时都会执行的块:只需删除static关键字即可。
static
做什么都没关系registerNatives().。这里重要的是您已将其包含在静态块中。当 java Class Loader 加载类时加载并运行静态块。因此保证每个 JVM 只运行一次。
registerNatives().
1.这里的问题不是关于构造函数链接,而是关于静态的。
2. JVM加载类时会初始化静态变量,当类实例化或调用该类的任何静态方法时,JVM会加载该类。
3.所以这个静态块会在 JVM 每次加载类时运行一次。