ClassLoader原理

一.ClassLoader分为bootClassStrap,ExtClassLoader,AppClassLoader.

booeClassStrap由C或更底层的语言实现,用来加载jvm和操作系统最底层的核心类库

Ext由java实现,用来加载比较核心的类库

App由java实现,用来加载应用资源,比如class path中的资源,eclipse plugin中的资源等等

 

二.加载器通常都是把加载权优先上抛给parent加载器,当parent加载不到时才转交给child,最后一个child也加载不到时,抛出ClassNotFoundException.

 

三.如下代码:

    ClassLoader cl = MyClassLoader.class.getClassLoader();
    System.out.println(cl);
    System.out.println(cl.getParent());
    System.out.println(cl.getParent().getParent());
    
    System.out.println("bootStrap:“"+System.getProperty("sun.boot.class.path"));

    System.out.println("extClassLoader:“"+System.getProperty("java.ext.dirs"));

    System.out.println("appClassLoader:“"+System.getProperty("java.class.path"));
    ClassLoader cl2 = MyDfs.class.getClassLoader();
    System.out.println("----------------------------------------------");
    System.out.println(cl2);
    System.out.println(cl2.getParent());
    System.out.println(cl2.getParent().getParent());
    
    System.out.println("bootStrap:“"+System.getProperty("sun.boot.class.path"));

    System.out.println("extClassLoader:“"+System.getProperty("java.ext.dirs"));

    System.out.println("appClassLoader:“"+System.getProperty("java.class.path"));

 运行结果:

sun.misc.Launcher$AppClassLoader@19821f

sun.misc.Launcher$ExtClassLoader@addbf1

null

bootStrap:“F:\istallHome\java\jdk\jre\lib\resources.jar;F:\istallHome\java\jdk\jre\lib\rt.jar

extClassLoader:“F:\istallHome\java\jdk\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext

appClassLoader:“D:\workspace\project\work\hadoop-0.19.2\hadoop-0.19.2\src\contrib\eclipse-plug...

----------------------------------------------
sun.misc.Launcher$AppClassLoader@19821f
sun.misc.Launcher$ExtClassLoader@addbf1
null

bootStrap:“F:\istallHome\java\jdk\jre\lib\resources.jar;F:\istallHome\java\jdk\jre\lib\rt.jar

extClassLoader:“F:\istallHome\java\jdk\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
appClassLoader:“D:\workspace\project\work\hadoop-0.19.2\hadoop-0.19.2\src\....

 

可以看出来。他们分别加载了哪些东西,而且不同两个类的classLoader其实是同一个对象。至于BootStrap为什么为null.那是因为他不是java object,因为是用其他底层语言实现的,所以我们无法看到他的对象信息,但其实它是存在的。

你可能感兴趣的:(ClassLoader)