何时在Java类中实例化静态块

Isu*_*uru 0 java static static-block

假设一个类中有一个静态块

public class Menu {

    private static Map<String, String> buttonEventMap = new HashMap<String, String>();

    static {
        buttonEventMap.put("show-user","show");
        buttonEventMap.put("delete-user","delete");
    }

    public static Map<String, String> getHashMap() // To get the hash map
}
Run Code Online (Sandbox Code Playgroud)

什么是块的生命周期,何时实例化,程序启动时或者我们创建类的第一个对象时

JB *_*zet 6

它是在类加载器初始化类时执行的.并且该类是懒惰地初始化的,第一次应用程序中的某些代码需要此类(调用静态方法,或引用其静态字段之一,或者创建新实例).

因此,如果程序从不使用该类,则永远不会执行静态块.