从一段示例代码开始
Class clz = Class.forName("ClassA");
Object instance = clz.newInstance();
Method method = clz.getMethod("myMethod", String.class);
method.invoke(instance, "abc","efg");
前两行实现了类的装载、链接和初始化(newInstance方法实际上也是使用反射调用了<init>
方法),后两行实现了从class对象中获取到method对象然后执行反射调用。试想一下,如果Method.invoke
方法内,动态拼接成如下代码,转化成JVM能运行的字节码,就可以实现反射调用了。
public Object invoke(Object obj, Object[] param){
MyClass instance=(MyClass)obj;
return instan