这只是做做笔记,先来段代码。
动态调用了类A的方法myPrint
package com.Ref;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test {
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws InvocationTargetException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// TODO Auto-generated method stub
String c = "com.Ref.A";
Class myc = Class.forName(c);
Object o = myc.newInstance();
Method[] methods = myc.getMethods();
for(Method m : methods){
if(m.getName().equals("myPrint")){
m.invoke(o);
}
}
}
}
class A{
public void myPrint(){
System.out.println("this is reflex");
}
}
搞张图片:主要使用了java,lang类下的Class与ClassLoader
又来上图,看完这又知道怎么影过去了吧,className就是传入的值咯。。
还可以下面使用ClassLoader 来,过程记到这就行了,有API我怕个毛。。。
图图图,要new对像了,实例化了吧。。。
又见图,getMethods()方法反回Method,方法就这么到手了吧
调用java.lang.Object下的,实现