2012-07-27 167 views
1

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

这种方法究竟发生了什么registerNatives()

package java.lang; 

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

此代码不会编译。 – 2012-07-27 09:54:03

+0

:)不,不是我的代码。这是从Jdk源代码复制的。 – sij 2012-07-27 09:55:30

+1

http://stackoverflow.com/questions/335311/static-initializer-in-java的可能的副本 – 2012-07-27 09:56:19

回答

2

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

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

1

registerNatives().做什么并不重要。这里重要的是你已经把它放在静态块中。静态块在Java Class Loader加载类时加载并运行。所以它保证每个JVM只运行一次。

0

这里的问题是构造函数链,而是静态的。当JVM加载这个类,和JVM装载当类被实例化或该类的任何静态方法被称为类

2.静态变量将被初始化。

所以这种静态块将每运行一次JVM装载的类。