JVM在运行时会产生三个ClassLoader,Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader.其中,Bootstrap是用C++编写的,我们在Java中看不到它,是null。它用来加载核心类库。Extension ClassLoader用来加载扩展类,即/lib/ext中的类。最后AppClassLoader才是加载Classpath上的类的。
    当类载入器载入类时,它会按照继承体系从最上层的类向下依次载入,直到所有的父类都被载入,再轮到自己。
    所以当加载系统核心类库和扩展库时,你编写的ClassLoader是不会先于Bootstrap ClassLoader、Extension ClassLoader的。

解决方案 »

  1.   

    IBM网站有这样一篇文章:
    http://www-900.ibm.com/developerWorks/cn/java/l-secureclass/index.shtml#5
    其上说到了如何自己写一个ClassLoader并使用它,他说的是自己写一个CostomClassLoader类继承ClassLoader,并重载其中的LoadClass等方法,然后用
    java CustomClassLoader arg0...
    这样就可以使用你的CustomClassLoader了。但是我觉得这样只是在jvm上运行了CustomClassLoader,CustomClassLoader里面使用重载后的LoadClass方法再去加载了其它的类。并不是让CustomClassLoader替换了JVM中的ClassLoader类。
    如果是当java app  (app是任何一个普通java类)时,jvm都是使用CustomClassLoader来加在app类时,这样才叫JVM使用了“CustomClassLoader”,不知你的问题是不是问的后面这种情况下的“使用自己的ClassLoader”,如果是,我也想知道答案,知道答案了记得也告诉我。^-^