例1:
package org.example.invoke;
import java.lang.reflect.Method;
public class TestInvoke {
public int test(int a, int b) {
return a + b;
}
public static void main(String[] args) throws Exception {
// 类类型(如果是字符串可以用Class.forName加载)
Class<?> c = TestInvoke.class;
// 调用者
Object handler = c.newInstance();
// 获取方法(根据方法名和参数类型列表明确是哪个方法)
Method method = c.getDeclaredMethod("test", int.class, int.class);
// 参数类型(可以根据这个参数类型,赋值给paramArr每个字段值)
Class<?>[] parameter = method.getParameterTypes();
for (int i = 0; i < parameter.length; i++) {
System.out.print(parameter[i] + " ");
}
System.out.println();
// 得到实际参数
Object[] paramArr = new Object[]{1, 2};
// 回调,并且得到返回值
Object ret = method.invoke(handler, paramArr);
System.out.println(ret);
}
}
/*
int int
3
*/
1.方法 Method
2.方法所在的对象实例 Object
3.方法实际参数 Object[]
例2:static和非static方法(如:一个Manager类被调用init方法初始化)
package org.example.testInit;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Common {
private static int num = 0;
public static void init() {
num = 10;
}
public static void show() {
System.out.println(num);
}
public static void main(String[] args) throws Exception {
// 静态方法
// Method m = Common.class.getMethod("init");
// m.invoke(null, new Object[0]);
// 静态和非静态方法都可以
Common common = new Common();
Method m = common.getClass().getMethod("init");
m.invoke(common, new Object[0]);
System.out.println(Modifier.isStatic(m.getModifiers()));
Common.show();
}
}
/*
false
10
*/