所有的Java虚拟机实现必须在每个类或接口首次主动使用时初始化,以下6种情形符合主动使用的要求:
1. 当创建某个类的新实例时
2. 当调用某个类的静态方法时
3. 当使用某个类或接口的静态字段,或者对该字段赋值时
4. 当调用Java API中的某些反射方法时
5. 当初始化某个类的子类时
6. 当虚拟机启动时某个被标明为启动类的类,即含有main()方法的类
注意第5条对接口不适用。它只有在某个接口所声明的非常量字段被使用时,该接口才会被初始化,而不会因为该接口的子接口或实现该接口的类被初始化时而被初始化。