您的位置:首页 > 编程语言 > Java开发

java类加载器-(1)

2015-09-04 12:12 471 查看
package vmrun;

import java.io.InputStream;

public class ClassLoadTest {
public static void main(String [] args) throws Exception{
ClassLoader myLoader = new ClassLoader() {

@Override
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 (Exception e) {
throw new ClassNotFoundException(name);
}
}

};

Object object= myLoader.loadClass("vmrun.InvokeDynamicTest").newInstance();
System.out.println(object.getClass()) ;
System.out.println(object instanceof vmrun.InvokeDynamicTest);
}
}


 输出

class vmrun.InvokeDynamicTest

false

  这里我们得到的Class对象是CLassLoader可以识别的类,而InvokeDynamicTest是程序执行后可以识别的类,此时仅仅装载了InvokeDynamicTest的程序代码,还没有创建出其对象 ,接下来可以使用Class.newInsance()方法来调用InvokeDynamic类的构造方法,并返回一个真正的InvokeDynamicTest对象。

  但是我们不能直接去调用 InvokeDynamicTest的任何方法,只能通过反射去调用其方法。

对比 学习

DexClassLoader使用-(1)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: