反射用法
上面讲了类加载机制,会将类放到一个池子里面。这时候如果我们想获取某个类,然后调用某个类的方法的话,可以使用反射。
import java.lang.reflect.Method;
public class TestClassLoader {
public static void main(java.lang.String args[]) throws Exception{
//类加载器
System.out.println("启动类加载器--BOOTSTRAP ClassLoader 加载C:\\Program Files\\Java\\jre1.8.0_112\\lib\\rt.jar: "+String.class.getClassLoader());
System.out.println("扩展类加载器--Extension ClassLoader 加载C:\\Program Files\\Java\\jre1.8.0_112\\lib\\ext下面的类 :"+com.sun.crypto.provider.DESKeyFactory.class.getClassLoader().getClass().getName());
System.out.println("应用程序类加载器--Application ClassLoader 加载所有我们写的类"+ TestClassLoader.class.getClassLoader().getClass().getName());
//类加载器的 组合拳
ClassLoader classLoader = TestClassLoader.class.getClassLoader();
while(classLoader!=null){
System.out.println(classLoader.getClass().getName());
classLoader= classLoader.getParent();
}
//反射
Class<?> forName = Class.forName("M");
Object newInstance = forName.newInstance();
Method m = M.class.getMethod("refl");
m.invoke(newInstance);
}
}
class M{
public static void refl(){
System.out.println("hahaha");
}
}
简单用法就像这样。
还没有评论,来说两句吧...