Java有三种类加载器,分别是启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。
启动类加载器(Bootstrap ClassLoader):负责加载Java的核心类库,例如Java API中的rt.jar和resources.jar等。它是JVM内置的类加载器,通常由JVM的实现提供。
扩展类加载器(Extension ClassLoader):负责加载Java扩展类库,例如Java API中的ext目录中的jar包。它是由JVM的实现提供的类加载器,通常是在启动类加载器之后加载的。
应用程序类加载器(Application ClassLoader):负责加载应用程序中的类,例如Java应用程序中的jar包。它是由Java开发者自己提供的类加载器,通常是在扩展类加载器之后加载的。
类加载器的工作原理如下:
类加载器首先从文件系统、网络等地方获取类文件的字节码。
类加载器将获取到的字节码加载到JVM的内存中,并将其转换成运行时数据结构(例如Java类)。
类加载器为加载的类分配一个唯一的标识符,并将其保存在运行时数据结构中,以便后续的访问。
类加载器将加载的类的依赖类递归加载,并通过Java虚拟机的链接阶段来解析它们之间的关系。
最后,类加载器将运行时数据结构中的类提交给Java虚拟机执行。
总的来说,类加载器的工作是将类文件加载到JVM内存中,并将其转换为可执行的Java类。通过使用不同的类加载器,Java程序可以实现动态加载类、版本控制、代码隔离等功能。