Follow me on GitHub

类加载(五):类加载器与类的唯一性

类加载机制的 5 个阶段中,只有“加载”阶段有一定的可定制性,更具体的,只有“加载”阶段的第一步可定制:

  • 根据类的 全限定名 获取 定义该类 的二进制字节流;

该步骤由类加载器实现,开发者可通过自定义类加载器影响该步骤,其余阶段在 JVM 内部实现,开发者无法触碰。

每个类加载器有自己 独立 的名字空间,类加载器 + 类本身 才能唯一确定一个类。

同一 JVM 中,相同的 class 文件 被两个不同的类加载器加载后,JVM 会认为它们是两个不同的类,即两个类“相等”的基本前提是它们由 同一类加载器 加载。

两个类“相等”的含义由以下决定:

  • 代表类的 Class 实例的方法
    • equals
    • isAssignableFrom
    • isInstance
  • instanceOf 关键字