下类有一个静态方法,一个非静态方法
public class Msym {
public static void test(String[] arg){
for (String string : arg) {
System.out.println(string);
}
}
public static void test1(String[] arg){
for (String string : arg) {
System.out.println(string);
}
}
}
首先调用静态方法,不需要获取类对象
public static void main(String[] args)throws Exception {
//获取字节码对象
Class<Msym> clazz = (Class<Msym>) Class.forName("com.example.algorithm.reflection.Msym");
String[] s = new String[]{"aa","bb"};
//获取Method对象
Method method = clazz.getMethod("test", String[].class);
//调用invoke方法来调用
method.invoke(null, (Object) s);
}
调用非静态方法需要获取类对象
public static void main(String[] args)throws Exception {
//获取字节码对象
Class<Msym> clazz = (Class<Msym>) Class.forName("com.example.algorithm.reflection.Msym");
//获取一个对象
Constructor con = clazz.getConstructor();
Msym m = (Msym) con.newInstance();
String[] s = new String[]{"aa","bb"};
//获取Method对象
Method method = clazz.getMethod("test1", String[].class);
//调用invoke方法来调用
method.invoke(m, (Object) s);
}
请注意两者区别