提问:什么是双亲委派?

首先,我们先引入类加载模式

在java中有4中类加载器,他们分别是(最顶层到最底层):

  • 启动类加载器:这个加载器是最顶层的类加载器,由C++编写,负责加载JDK的核心类库。
  • 扩展类加载器:这个加载器是用于加载Java的扩展类库(如jre/lib/ext目录下的类)。
  • 应用程序类加载器:这个类加载器用于加载用户类路径下的类,是默认的类加载器。
  • 用户自定义加载器:这个加载器是用于加载特定路径的类,由用户继承ClassLoader实现。

然后解释什么是双亲委派机制

双亲委派机制的核心就是:当一个类加载器收到加载请求时,先委托给它的上一层级的类加载器(父亲)依次类推。只有上一层级的加载器无法加载时,才会自己进行类的加载。这种机制保证了类的唯一性和安全性(不能进行类的伪造及避免类被篡改)。

最后,理解类加载的完整过程

类加载分为5步:

  • 加载:通过类的全限定类名获取字节流,将其转为方法区的运行时的数据结构,主要生成Class对象。
  • 验证:校验字节流的合法性(比如格式,语义,字节码等),确保安全。
  • 准备:为类的静态变量分配内存并设置默认初始值。(比如int默认设置为0)。
  • 解析:将常量池中的符号引用替换为直接引用。
  • 初始化:执行类的静态代码块和静态变量的赋值操作,这是类加载的最后阶段。

学会了吗?