从类加载器到双亲委派模式。

双亲委派模式的英文叫做Parents Delegation Model。

自己写的Java类需要经过编译类加载这两个过程。

在加载某个类的时候,会将查询和加载委派给父加载器。如果父加载器都无法加载,则尝试自己加载。

有两个好处,一个是安全。

类加载器

在Java中,类加载器(Class Loader)是一个重要的概念,它负责将Java字节码文件加载到内存中,并生成对应的Java类。在Java虚拟机(JVM)中,每个类加载器都有自己的加载范围和优先级,通常情况下会根据类的名称和路径进行查找和加载,确保类的唯一性和正确性。

Java虚拟机提供了三种类加载器:

  • 引导类加载器(Bootstrap Class Loader):负责加载Java平台核心类库。
  • 扩展类加载器(Extension Class Loader):负责加载Java平台扩展库。
  • 应用程序类加载器(Application Class Loader):负责加载应用程序类和第三方类库。

除了JVM提供的默认类加载器之外,还可以通过自定义类加载器来实现特定的类加载行为,例如从网络或数据库中加载类等。自定义类加载器通常继承自java.lang.ClassLoader类,并重写findClass()方法实现类的查找和加载。


双亲委派模式

双亲委派模式(Parent-Delegate Model)是 Java 类加载器(ClassLoader)在加载类时所采用的一种设计模式。这种模式的核心思想是:当一个类加载器收到类加载请求时,首先不会尝试自己加载这个类,而是将请求委派给其父类加载器。依次递归,直到最顶层的启动类加载器(Bootstrap ClassLoader);如果父类加载器无法加载该类,子类加载器才尝试自己去加载。

  • 避免类的重复加载:通过委派给父类加载器加载类,可以确保同一个类不会被多个类加载器重复加载。这有助于节省内存资源,并确保类之间的互操作性。
  • 保护 Java 核心类库:由于双亲委派模式的存在,用户自定义的类加载器无法直接加载 Java 核心类库(如java.lang.Object等)。这有助于确保 Java 核心类库的安全性,防止恶意代码篡改或破坏Java核心类。
  • 维护类加载器的层次结构:双亲委派模式使得各级类加载器可以按照一定的层次结构来组织和管理。这有助于降低类加载器的复杂性,简化类加载过程。