Java类生命周期

  • 加载

    • 先说下类加载器(ClassLoader):java类经过编译生产.class文件。JVM通过类加载器读取类的二进制流,然后在做其他操作。类加载器主要有引导类加载器扩展类加载器应用程序类加载器。每次加载一个用户的类都是先判断是否加载,过然后逐层请求父类加载器去获取,如果父类获取不到该类,则交给子类去加载。这种模式称为双亲委派模型。好处:1.避免重复加载。2.保证系统安全性,防止被核心库被替换。
    • 使用类加载器来加载。将类信息存放到元空间,然后在堆中实例化Class对象,最为元空间类的入口。
  • 连接

    • 验证

      • 验证类是否符合java规范。
    • 准备

      • 为变量赋默认值。只有final+static修饰的变量才会赋显示的初始化值。其他变量都只会赋默认值。
        1
        2
        3
        4
        //这里只有num3会赋值1,其他都是0
        private static int num = 1;
        private static int num2;
        private static final int num3 = 1;
    • 解析

      • 将常量池(元空间)中的符号引用替换为直接引用的过程。
  • 初始化

    • 只有主动使用类才会执行初始化。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      //初始化顺序
      父类--静态变量
      父类--静态初始化块
      子类--静态变量
      子类--静态初始化块
      父类--变量
      父类--初始化块
      父类--构造器
      子类--变量
      子类--初始化块
      子类--构造器
  • 使用

  • 卸载

    • finalize()