类加载的过程
-
连接
验证(字节码文件的验证)
准备 将静态内容做初始化
解析(将符号引用 变为直接引用)
-
初始化
给静态内容赋值
类何时被加载?
首先先了解一下类的主动使用和被动使用
类的主动使用
- 创建类的实例对象
- 使用静态方法
- 调用静态的成员变量 ,成员变量只能在运行期间确定其值
- 被表明为启动器类 会被加载(类中存在main方法)
- 反射(Class.forName(“xxx.xxx.xxx”))
- 初始化子类父类会被加载。
类的被动使用:
- 初始化数组时不会导致数组对应类型加载
- 通过子类访问父类中独有的静态内容时,不会导致子类加载
- 类中的静态常量值如果是定值不会导致类加载
- 加载一个类时不会导致父接口加载 (注意如果通过类对象调用接口中定义的内容 接口会被加载)
总结:只有类的主动使用才能使类加载