Java类加载器

  • Java运行时具有以下内置类加载器:
    • Bootstrap类加载器。 它是虚拟机的内置类加载器,通常表示为null ,并且没有父null

    • Platform class loader 。 平台类加载器可以看到所有平台类 ,可以将其用作ClassLoader实例的父ClassLoader 。 平台类包括由平台类加载器或其祖先定义的Java SE平台API,其实现类和JDK特定的运行时类。

      为了允许对定义到平台类加载器的模块进行升级/覆盖,并且升级后的模块读取定义到除了平台类加载器及其祖先之外的类加载器的模块,则平台类加载器可能必须委派给其他类加载器例如应用程序类加载器。 换句话说,除了平台类加载器及其祖先之外,定义为类加载器的命名模块中的类可能对平台类加载器是可见的。

    • System class loader 。 它也被称为应用程序类加载器 ,与平台类加载器不同。 系统类加载器通常用于定义应用程序类路径,模块路径和JDK特定工具上的类。 平台类加载器是所有平台类对其可见的系统类加载器的父级或祖先。

     

    package ClassTest;
    
    /**
     * FileName: ClassDemo01
     * Author:   lps
     * Date:     2022/4/11 14:20
     * Sign:刘品水 Q:1944900433
     */
    public class ClassDemo01 {
        public static void main(String[] args) {
            //ClassLoader getParent() 返回父类加载器进行委派。
            //static ClassLoader getSystemClassLoader() 返回用于委派的系统类加载器。
            ClassLoader c = ClassLoader.getSystemClassLoader();
            System.out.println(c);
            //jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b
            //AppClassLoader
            ClassLoader c2 = c.getParent();
            System.out.println(c2);
            //jdk.internal.loader.ClassLoaders$PlatformClassLoader@776ec8df
            //PlatformClassLoader
            ClassLoader c3 = c2.getParent();
            System.out.println(c3);
            //null
            //Bootstrap类加载器。 它是虚拟机的内置类加载器,通常表示为null ,并且没有父null 。
    
        }
    }

     

     

     

posted @ 2022-04-11 15:22  刘品水  阅读(97)  评论(0编辑  收藏  举报