类加载-初始化阶段

2020-08-19  本文已影响0人  不再_犹豫

加载顺序总结

父类的静态字段——>父类静态代码块——>子类静态字段——>子类静态代码块——>
父类成员变量(非静态字段)——>父类非静态代码块——>父类构造器——>子类成员变量——>子类非静态代码块——>子类构造器

JVM 对 Book 类进行初始化首先是执行类构造器(按顺序收集类中所有静态代码块类变量赋值语句就组成了类构造器),后执行对象的构造器(按顺序收集成员变量赋值和普通代码块,最后收集对象构造器,最终组成对象构造器 )。

  1. 确定类变量的初始值。在类加载的准备阶段,JVM 会为类变量初始化零值,这时候类变量会有一个初始的零值。如果是被 final 修饰的类变量,则直接会被初始成用户想要的值。
  2. 初始化入口方法。当进入类加载的初始化阶段后,JVM 会寻找整个 main 方法入口,从而初始化 main 方法所在的整个类。当需要对一个类进行初始化时,会首先初始化类构造器(),之后初始化对象构造器()。
  3. 初始化类构造器。JVM 会按顺序收集类变量的赋值语句、静态代码块,最终组成类构造器由 JVM 执行。
  4. 初始化对象构造器。JVM 会按照收集成员变量的赋值语句、普通代码块,最后收集构造方法,将它们组成对象构造器,最终由 JVM 执行

自己总结

准备

1.为静态变量分配内存,并默认初始化

初始化

2.初始化

初始化步骤

1.假如这个类还没有被加载和连接,那就先进行加载和连接。
2.假如类存在直接的父类,并且这个父类还没有被初始化,那就先初始化直接的父类。
3.假如类中存在初始化语句,那就依次执行这些初始化语句。


初始化条件

(1) 主动引用

类加载器

双亲委派模型

类加载器

  1. 引导类加载器(Bootstrap ClassLoader):最顶层的加载类,主要加载核心类库
  2. 扩展类加载器(Extensions ClassLoader):
  3. 系统类加载器(System ClassLoader):加载当前项目下的类
  4. 自定义类加载器
    参考文章
    类加载器层级关系
    重新loadClass类可自定义类加载器,破坏双亲委派机制
上一篇 下一篇

猜你喜欢

热点阅读