类的加载过程?

加载->链接(验证,准备,解析)->初始化->启动->卸载

加载:

1.从一个类的全限定名来获取该类的二进制字节流

2.将该字节流所代表的静态储存结构转换成方法区的运行时的数据结构

3.java堆中生成一个该类的Class对象,作为方法区访问这些数据的入口

(Bootstrap ClassLoader java_home/lib,Extension ClassLoader java_home/lib/ext,

App ClassLoader  classpath下的类库<检查顺序从后往前,加载顺序从前往后>)

链接:

验证:确保类的正确性

准备:为类的静态变量分配内存,并且赋上初始值

解析:把类的符号引用转换成直接引用,

初始化:为类的静态变量赋予正确的初始值

类加载最后一个阶段,前面的类加载阶段之后,除了在加载阶段可以自定义类加载器以外,其它操作都由JVM主导。到了初始阶段,才开始真正执行类中定义的Java程序代码。

1.new该类的对象

2.使用该类的静态变量或者赋值

3.调用该类的静态方法

4.反射

5.创建该类的子类

6.将该类设置为JVM的启动类

初始化顺序依次是:(静态变量、静态初始化块)>(变量、初始化块)–> 构造器;如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法

猜你喜欢

转载自www.cnblogs.com/itxiaok/p/9459711.html