package com.test;
import java.util.List;
public class Test1 {
/**
* 不带参数的方法
*/
public void a(){
System.out.println("不带参数的方法a");
}
/**
* 带参数的方法
* @param str
* @param list
*/
public void b(String str,List<String> list){
System.out.println("带参数的方法b,参数是"+str+","+list.toString());
}
}
package com.invoke.demo;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) throws InstantiationException, ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class clasz = Class.forName("com.test.Test1");
/**
* 参数a是方法名称
* 测试不带参数的方法
*/
Method method1 = clasz.getDeclaredMethod("a");
Object obj = clasz.newInstance();
/**
* 参数1 是 clasz.newInstance() 执行构造方法
*/
method1.invoke(obj);
/**
* 测试带参数的方法
*
*/
List<String> list = new ArrayList<>();
list.add("list1");
/**
* 参数b是方法名称
* 反射的方法里的参数类型
*/
Method method = clasz.getDeclaredMethod("b",String.class,List.class);
method.invoke(obj,"param1",list);
//System.out.println(clasz);
}
}