Java中的类加载器可以分为以下几种类型:
- 启动类加载器(Bootstrap ClassLoader):它是JVM的一部分,负责加载Java的核心类库,如java.lang包中的类。它是JVM自身的一部分,由C++实现,不是Java类,因此在Java中无法直接获取到启动类加载器的引用。
- 扩展类加载器(Extension ClassLoader):它负责加载Java的扩展类库,位于JRE的lib/ext目录下的jar包。开发者可以通过系统属性java.ext.dirs指定扩展类库的路径。
- 应用程序类加载器(Application ClassLoader):也称为系统类加载器,它负责加载应用程序的类,即开发者自己编写的类。它是ClassLoader类的子类,是Java中默认的类加载器。
- 自定义类加载器:开发者可以通过继承ClassLoader类,实现自己的类加载器。自定义类加载器可以加载特定路径下的类文件,或者从其他来源(如网络、数据库)加载类。
类加载器采用双亲委派模型(Parent Delegation Model)来加载类。即当一个类加载器收到加载类的请求时,它会首先将这个请求委派给父加载器来尝试加载,只有当父加载器无法加载时,才会由当前加载器自己来加载。
这种层次结构的类加载器可以保证Java类的安全性和一致性。通过双亲委派模型,可以确保核心类库的安全性,避免了不同类加载器加载同一个类的问题。同时,开发者也可以通过自定义类加载器来实现特定的加载逻辑,例如加载加密的类文件、加载网络上的类等。