这个面试题来自一位群友的面试题分享
今天我们就来盘一盘这个面试题,不过在说双亲委派模型之前,我们得先简单了解下类加载。
类加载
我们平常写的代码是保存在一个 .java文件里面,经过编译会生成.class文件,这个文件存储的就是字节码,如果要用上我们的代码,那就必须把它加载到 JVM 中。
当然,加载到 JVM 生成 class 对象的来源不一定得是.class文件,也可以来自网络等等,反正只要是符合 JVM 规范的都行。
而类加载的步骤主要分为:加载、链接、初始化。
加载
其实就是找到字节流,然后将其加载到 JVM 中,生成类对象。这个阶段就是类加载器派上用场的阶段,等下我们再细说。
链接
这个阶段是要让生成的类对象融入到 JVM 中,分别要经历以下三个步骤:
验证就是检验一下加载的类是否满足 JVM 的约束条件,也就是判断是否合规。
准备就是为加载类的静态变量申请内存空间,并赋予初始值,例如是 int 类型那初始值就是 0。
解析就是将符号引用解析成为实际引用,讲人话就是:例如 Yes 类里面引用了一个 XX 类,那一开始 Yes 类肯定不知道 XX 类在内存里面的地址,所以就先搞个符号引用替代一下,假装知道,等类加载解析的时候再找到 XX 类真正地址,做一个实际引用。
这就是解析