2012-05-29 99 views
0

假设有一个类当静态块在Java类实例化

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 
} 

什么块,到时将被实例化,生命周期的一个静态块中的程序在启动时或当我们创建类的第一个对象

+0

我们是否假设'main'在这个类之外? – Insectatorious

+0

主要将在类之外 – Isuru

+0

http://stackoverflow.com/questions/2007666/in-what-order-do-static-initializer-blocks-in-java-run和http://stackoverflow.com/questions/ 2943556/static-block-in-java –

回答

2

当您第一次访问应用程序中的类时。

+0

访问意味着当我们创建第一个对象的时候上课? – Isuru

+0

是的典型。 JB Nizet已经更完整地回答了这个问题。 –

6

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

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

+1

完全精确的陈述是当类被**初始化时它被执行**。类加载可以在实现看起来合适的任何时候发生,而类init必须在JLS定义的精确时刻发生。 –

+0

谢谢Marko。固定。 –