今天学习的内容是方法的反射:
从我们之前的博客中可以学习到从类的对象获取Class Type,以达到获取此类的所有信息(包括构造函数,方法的信息等等),
我们平时都是通过new 类的对象来调用类中的方法,今天我们通过反射的方法来调用类中的方法
我们看一个经典的例子就可以知道了:
import java.lang.reflect.Method;
/**
* @Description 方法的反射
* @Date 2019/1/8 14:56
* @Created by FLXH
*/
public class MethodDemo1 {
public static void main(String[] args) throws Exception {
A a = new A();
//获取Class Type
Class c = a.getClass();
//获取Method对象
Method method = c.getMethod("print", int.class, int.class);
//通过方法去执行对象
//invoke方法(对象名,参数列表(有多少个传多少))
method.invoke(a,10,20);
Method method1 = c.getMethod("print");
method1.invoke(a);
Method method2 = c.getMethod("print",new Class[]{String.class,String.class});
method2.invoke(a,new Object[]{"hello","world"});
}
}
class A {
public void print() {
System.out.println("hello");
}
public void print(int a, int b) {
System.out.println(a + b);
}
public void print(String a, String b) {
System.out.println(a + " " + b);
}
}
从上面的代码可以知道:
首先我们通过c.getMethod指定要调用方法的名字以及参数列表的Class Type,参数列表的不同(个数或者类型)会调用不同的方法,然后通过method.invoke方法,其中传入的第一个参数是类的对象名称,后面的传的是参数列表,不同的参数列表调用不同的方法,其中传参可以用两种方法,可以有多少传多少,比如:
Method method = c.getMethod("print", int.class, int.class);
也可以封装成一个数组:
Method method2 = c.getMethod("print",new Class[]{String.class,String.class});
invoke方法也是如此