程序中对子类的“主动使用”会导致父类被初始化,但对父类的“主动” 使用并不会导致子类的
初始化
编译时常量的调用不会导致类的加载。
主动使用:
1,创建类的实例
2,访问某个类或接口的静态变量,或者对该静态变量赋值
3,调用类的静态方法
4,反射,如Class.forName()
5,初始化一个类的子类
6,java虚拟机启动时被标明为启动的类
除上述六种情形,其他使用java类的方式都被看作是被动使用,不会导致类的初始化
接口:
当JAVA虚拟机初始化一个类时,要求它的所有你类都已经被初始化,但是这条规则并不适用于接口
1, 初始化一个类时,并不会先初始化它所实现的接口
2,在初始化一个接口时,并不会先初始化它的父接口
因此,一个父接口并不会因为它的子接口或者实现类的初始化而初始化。只有当程序首次使用特定接口的静态变量时,才会导致该接口的初始化
ClassLoader