看了一位兄台的文章,http://blog.chenlb.com/2009/06/java-classloader-architecture.html,了解了一些classLoader的基础知识.做了一个简单的验证动态加载用户类的程序(代码如下),发现重复调用loadClass的方法,每次findLoadedClass返回的都是空,不知道是不是我哪里用错了? 请达人指点...package com.victor.classLoader;public class VictorClassLoader extends ClassLoader { public VictorClassLoader(){

}

public Class<?> loadClass(String className){
Class<?> c = this.findLoadedClass(className) ;
if(c == null){
System.out.println(className+" is being loaded!");
try{

c = getParent().loadClass(className);
}catch(Exception e){
e.printStackTrace();

}

}
else{
System.out.println(className+" has been loaded!");
}
System.out.println(className+" ==="+c);
return c;
}
}

解决方案 »

  1.   

    其实你的class每次都是 parent加载的,不是你这个classLoader,就是这句,
                 c = getParent().loadClass(className);故每次你 Class<?> c = this.findLoadedClass(className) ; 这个c总是null.如果你使用 getParent().findLoadedClass(className), 返回应该不是null.
      

  2.   


    我明白了,是不是getParent()返回的并不是父类,而是在父类中的一个ClassLoader的实例。所以,当getParent()加载之后,this.findLoadedClass是找不到的。只能通过getParent().findLoadedClass找到。