1、类加载的双亲委托机制详解

 

    在父亲委托机制中,各个加载器按照父子关系造成了树形结构,除了根类加载器以外,其他类加载器都有且只有一个父加载器java

 

    通俗理解: 某一个类加载器加载一个特定的类,他并非当即由本身加载了,而是将这个动做委托给父亲来完成,若是父亲还有父亲,就继续将这个动做向上传递,一直到没有父亲的   根类加载器测试

也就是启动类加载器。由根类加载来尝试着进行加载咱们所要加载的class文件,若是不成功,就返回给拓展类加载器,拓展类加载器尝试着加载,若是不成功就继续向下传递,一直到加载成功,而后将整个加载动做返回给第一次尝试加载的加载器中。spa

 

      本身想要去加载,本身不去加载,让本身的父亲去加载,若是上面还有,就继续向上追溯,一直到根节点,而后根节点尝试本身加载,若是能加载,则成功,传递加载动做给 第一次加载的类加载器,若是不成功,传递给子节点,让子节点尝试去加载,子节点可否加载成功,成功则返回加载动做,若是不成功,接续传递给子节点,重复执行。3d

 

    并非全部的类加载都是双亲委托机制  Oracle 的JDK 是标准的双亲委托机制code

 

 

2、使用代码进行测试、分别加载String  和用户自定义的类

    

package com.zuoyan.classloader;

public class ClassLoaderDemo {
    
    public static void main(String[] args) throws Exception {
        Class<?> clazz1 = Class.forName("java.lang.String");
        ClassLoader clazz1ClassLoader = clazz1.getClassLoader();
        Class<?> clazz2 = Class.forName("com.zuoyan.classloader.C");
        ClassLoader classLoader2 = clazz2.getClassLoader();

        System.out.println(clazz1ClassLoader);
        System.out.println(classLoader2);

    }
}

class C{

}

 

  代码执行结果:blog

  

    null
    sun.misc.Launcher$AppClassLoader@18b4aac2ssl

  

 

  执行结果的解释,若是是使用跟类加载进行加载的,返回的就是null ,如下是类加载中的getClassLoader 上的方法注释get

              

相关文章
相关标签/搜索