java类加载器顺序_java中类的加载顺序介绍(ClassLoader)

1、ClassNotFoundExcetpion

我们在开发中,经常可以遇见java.lang.ClassNotFoundExcetpion这个异常,今天我就来总结一下这个问题。对于这个异常,它实质涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然它和我们直接打交道不多,但是对其背后的机理有一定理解有助于我们排查程序中出现的类加载失败等技术问题。

2、类的加载过程

一个java文件从被加载到被卸载这个生命过程,总共要经历5个阶段,JVM将类加载过程分为:  加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载

(1)加载

首先通过一个类的全限定名来获取此类的二进制字节流;其次将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;最后在java堆中生成一个代表这个类的Class对象,作为方法区这些数据的访问入口。总的来说就是查找并加载类的二进制数据。

(2)链接:

验证:确保被加载类的正确性;   准备:为类的静态变量分配内存,并将其初始化为默认值;   解析:把类中的符号引用转换为直接引用;

(3)为类的静态变量赋予正确的初始值

3、类的初始化

(1)类什么时候才被初始化

1)创建类的实例,也就是new一个对象   2)访问某个类或接口的静态变量,或者对该静态变量赋值   3)调用类的静态方法   4)反射(Class.forName(“com.lyj.load”))   5)初始化一个类的子类(会首先初始化子类的父类)   6)JVM启动时标明的启动类,即文件名和类名相同的那个类

你可能感兴趣的:(java类加载器顺序)