天天看点

【java_jvm】类加载、类初始化、反射机制

  • 参考文章
https://www.cnblogs.com/ityouknow/p/5603287.html
  • 类的生命周期
  1. 加载
  2. 连接

    2.1 验证

    四个验证:文件格式、元数据、字节码、符号引用
    2.2 准备
    为类的静态变量分配内存,并初始化为默认值
    2.3 解析
    把类中的符号引用转换为直接引用(将指针指向内存区域,即覆盖默认值)
  3. 初始化

    3.1

    假如类未加载和连接,则执行加载和连接
    3.2
    假如该类的父类还没有被初始化,则执行父类初始化
    3.3
    假如类中有初始化语句,则依次执行初始化语句
  4. 使用
  5. 卸载
  • 类加载的途径

– 从本地系统中直接加载

– 通过网络下载.class文件

– 从zip,jar等归档文件中加载.class文件

–从专有数据库中提取.class文件

– 将Java源文件动态编译为.class文件

  • 类初始化的时机

-new 一个实例

-访问类(接口)中的静态变量

-调用类(接口)的静态方法

-反射 如

Class.forName(HungrySingleton.class.getName());

-初始化某个类的子类,父类会先被初始化

-java虚拟机启动时被标明为启动类的类(Java Test)

  • 总结

    类加载在初始化之前,当使用反射的时候类加载已经完成,类的静态成员变量已经成功赋值。