有哪些类加载器?分别有什么作用?

  1. 启动类加载器(Bootstrap ClassLoader):这个类加载器是由 C++ 语言实现的,是虚拟机自身的一部分。负责将存在 \lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的类库加载到虚拟机内存中。启动内加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 即可;

  2. 其他类加载器:由 Java 语言实现,独立于虚拟机外部,并且全都继承自抽象类 java.lang.ClassLoader。如扩展类加载器和应用程序类加载器:

(1)扩展类加载器(Extension ClassLoader):这个类加载器由sun.misc.Launcher$ExtClassLoader 实现,它负责加载\lib\ext目录中的,或者被 java.ext.dirs 系统变量所指定的路径中的所有类库,开发者可以直接使用扩展类加载器。

(2)应用程序类加载器 (Application ClassLoader):这个类加载器由 sun.misc.Launcher$AppClassLoder 实现。由于个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,所以一般也称之为系统类加载器。它负责加载用户路径(ClassPath)所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

发表评论

后才能评论

评论(1)

  • mpweixin用户 普通 2023-04-07 11:24 上午

    类加载器是指:通过一个类的全限定性类名获取该类的二进制字节流叫做类加载器;类加载器分为以下四种:

    启动类加载器(BootStrapClassLoader):用来加载java核心类库,无法被java程序直接引用;

    扩展类加载器(Extension ClassLoader):用来加载java的扩展库,java的虚拟机实现会提供一个扩展库目录,该类加载器在扩展库目录里面查找并加载java类;

    系统类加载器(AppClassLoader):它根据java的类路径来加载类,一般来说,java应用的类都是通过它来加载的;

    自定义类加载器:由java语言实现,继承自ClassLoader;