Java类加载器使用全限定类名和加载该类的特定类加载器实例来唯一标识一个类。全限定类名包括类的包名和类名。因此,即使两个类具有相同的类名,但只要它们的包名或者加载它们的类加载器不同,Java就会将它们视为不同的类。
在Java中,类加载器的层次结构通常如下:
当加载一个类时,Java会首先询问父类加载器是否可以加载该类,这个过程会一直向上递归,直到引导类加载器。如果父类加载器可以加载该类,那么就由父类加载器加载;否则,子类加载器尝试自己加载。这就是所谓的父亲委派机制(Parent Delegation Model)。
因此,如果两个类具有相同的全限定类名,并且由同一个类加载器加载,那么Java会认为它们是同一个类。如果试图重复加载,类加载器会从其缓存(已加载类的内部表示)中返回类,而不会实际执行加载过程。如果两个类由不同的类加载器加载,即使它们的全限定类名相同,Java也会将它们视为不同的类。
领取专属 10元无门槛券
手把手带您无忧上云