jvm-类的装载
类的装载经过加载 、连接(验证、准备、解析)、初始化过程,最后转化为Class对象,存在方法区中。 1、类在什么情况下才会被装载? 1、创建类的实例:new关键字,反射、克隆、反序列化。 2、当调用类静态方法:使用了字节码invokestatic指令。 3、当使用类的静态字段时(final常量除外),比如使用了getstatic或者putstatic指令。 4、初始化子类时要求先初始化父类。 5、含有main方法的那个类。 上面的几种情况都属于主动使用,除了主动使用还有被动使用,被动使用不会引起类的初始化。 主动使用示例: public class Parent { static { System . out . println ( "parent init" ); } } public class Child extends Parent { static { System . out . println ( "child init" ); } } public class InitMain { public static void main ( String [] args ) { Child c = new Child (); } } 运行结果: parent init child init 使用new关键字创建类的实例会装载相关类,以及在初始化子类时,必须先初始化父类。