2
这是一个使用类加载器的例子,您可以看到输出。为什么obj
和obj2
的类加载器不同?我知道'父类加载器'的想法。JVM中的类加载器
public class jvm_77{
public static void main(String[] args) throws Exception{
ClassLoader myLoader = new ClassLoader(){
public Class<?> loadClass(String name) throws ClassNotFoundException{
try
{
String fileName = name.substring(name.lastIndexOf(".")+1)+".class";
InputStream is = getClass().getResourceAsStream(fileName);
if(is == null)
{
return super.loadClass(name);
}
byte[] b = new byte[is.available()];
is.read(b);
return defineClass(name,b,0,b.length);
}catch(IOException e)
{
throw new ClassNotFoundException(name);
}
}
};
Object obj = myLoader.loadClass("Chapter7_ClassLoader.jvm_77").newInstance();
jvm_77 obj2 = new jvm_77();
System.out.println(obj.getClass().getClassLoader()); //[email protected]
System.out.println(obj2.getClass().getClassLoader()); //[email protected]
System.out.println(obj.equals(obj2));//false
System.out.println(obj instanceof Chapter7_ClassLoader.jvm_77);//false
System.out.println(obj2 instanceof Chapter7_ClassLoader.jvm_77);//true
}
}