- 参考文章
- 类的生命周期
-
加载
-
连接
2.1 验证四个验证:文件格式、元数据、字节码、符号引用
2.2 准备
为类的静态变量分配内存,并初始化为默认值
2.3 解析
把类中的符号引用转换为直接引用(将指针指向内存区域,即覆盖默认值)
-
初始化
3.1假如类未加载和连接,则执行加载和连接
3.2
假如该类的父类还没有被初始化,则执行父类初始化
3.3
假如类中有初始化语句,则依次执行初始化语句
-
使用
-
卸载
- 类加载的途径
– 从本地系统中直接加载
– 通过网络下载.class文件
– 从zip,jar等归档文件中加载.class文件
–从专有数据库中提取.class文件
– 将Java源文件动态编译为.class文件
- 类初始化的时机
-new 一个实例
-访问类(接口)中的静态变量
-调用类(接口)的静态方法
-反射 如Class.forName(HungrySingleton.class.getName());
-初始化某个类的子类,父类会先被初始化
-java虚拟机启动时被标明为启动类的类(Java Test)
- 总结
类加载在初始化之前,当使用反射的时候类加载已经完成,类的静态成员变量已经成功赋值。