类加载器负责把.class文件加载到内存中并生成对应的Class类对象,本小节将讲解类加载器的种类、工作原理以及如何自定义类加载器。
类加载器负责加载所有的类,系统为所有被载入内存中的类生成一个Class类的对象实例。一旦一个类被载入内存中,同个类就不会被再次载入了。那么,如何样才算“同一个类”呢?正如一个对象有一个唯一的标识一样,一个载入内存中的类也有一个唯一的标识。 在Java语言中,一个类用包名以及自身的类名作为唯一标识,但在类加载机制中,一个类用包名、类名和其类加载器作为唯一标识。例如,如果在pg的包中有一个名为Person的类,它被类加载器ClassLoader对象k1加载,则该Person类对应的Class对象在表示为(Person、pg、k1)。 如果用ClassLoader对象k2加载这个类,则这个类的Class类对象被表示为(Person、pg、k2),在虚拟机看来,(Person、pg、k1) 和(Person、pg、k2) 是不同的,它们是互不兼容的。
Java虚拟机刚启动时,会有三个类加载器组成一个类加载器组,这个组中的成员包括: