- 参考文章
https://www.cnblogs.com/ityouknow/p/5603287.html
- 类的生命周期
- 加载
-
连接
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)
-
总结
类加载在初始化之前,当使用反射的时候类加载已经完成,类的静态成员变量已经成功赋值。