比如说a,b,c三个对象都要调用 print()方法,正常的思路就是要创建每个对象,并且a.print() b.print() c.print() ,但是使用反射的话,就 print()方法的对象.invoke(a,参数列表)想要用哪个对象就用哪个对象
例:
import java.lang.reflect.Method;
public class MethodDemo {
public static void main(String[] args) {
//想要获取print(int,int)
//1.要获取一个方法也就是要获取一个类的信息---》先拿到类的类类型
A a1 = new A();
Class c = a1.getClass();
//2.获取方法---》名称和参数列表来决定
try {
//Method m = c.getMethod("print",new Class[]{int.class,int.class})
Method m = c.getMethod("print",int.class,int.class);
//方法的反射操作是用m的对象来进行方法调用
//和 a1.print(10,20);效果完全相同
//反过来--用print这个方法对象来操作a1
//方法如果没有返回值则返回null,否则返回具体的返回值
//m.invoke(a1,new Object[]{10,20});
m.invoke(a1,10,20);//也可以使用数组
//另一个方法
Method m1 = c.getMethod("print",String.class,String.class);
m1.invoke(a1,"hello","world");
//没有参数的方法
Method m2 = c.getMethod("print");
m2.invoke(a1);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class A{
public void print(int a,int b){
System.out.println(a+b);
}
public void print(String a,String b){
System.out.println(a.toUpperCase()+b.toUpperCase());
}
public void print(){
System.out.println("没有参数");
}
}