操作步骤:
1、加载类,如Class cla=Person.class
2、调用getMethod()/getDeclaredMethod方法,参数1是方法名称,参数2是方法所需要的参数。
Method method = cla.getMethod("aa", String.class, int.class);
3、调用invoke()方法,第一个参数是类的对象,第二个参数是方法锁需要的参数。
method.invoke(ps, "zhansan", 40);
-----------------------------------------------------------------------
例子:
public class Person {
String name = "hello";
int password;
public void aa(){
System.out.println("方法aa");
}
public void aa(String name,int password){
System.out.println(name+":"+password);
}
private void aa(InputStream in){
System.out.println(in);
}
public static void aa(int num){
System.out.println(num);
}
--------------------------------------------------------------------------------------------------------------------
测试类:
public class Demo1 {
Person ps = new Person();
@Test
//方法不需要参数
public void demo() throws Throwable, SecurityException {
Class cla = Person.class;
// 第一个参数是方法名称,第二个参数是参数
Method method = cla.getMethod("aa", null);
// 第一个参数是对象,第二个是参数
method.invoke(ps, null);
}
@Test
//方法有两个参数
public void demo2() throws Throwable, SecurityException {
Class cla = Person.class;
// 第一个参数是方法名称,第二个参数是参数
Method method = cla.getMethod("aa", String.class, int.class);
// 第一个参数是对象,第二个是参数
method.invoke(ps, "zhansan", 40);
}
@Test
//方法是私有库,且参数是FileInputStream类型。
public void demo4() throws Throwable, SecurityException {
Class cla = Person.class;
// 第一个参数是方法名称,第二个参数是参数
Method method = cla.getDeclaredMethod("aa", FileInputStream.class);
method.setAccessible(true);
// 第一个参数是对象,第二个是参数
method.invoke(ps, new FileInputStream("c:\\1.txt"));
}
@Test
//方法是static修饰的
public void demo5() throws Throwable, SecurityException {
Class cla = Person.class;
// 第一个参数是方法名称,第二个参数是参数
Method method = cla.getMethod("aa", int.class);
// 第一个参数是对象,第二个是参数
method.invoke(null, 23);
}