通过反射机制还可以调用方法,这与调用构造方法类似。调用方法需要使用Method对象,它对应着一 个方法,获得Method对象需要使用Class类的如下方法:
- Method[] getMethods():返回所有公有方法Method对象数组。
- Method[] getDeclaredMethods():返回所有方法Method对象数组。
- Method getMethod(String name, Class… parameterTypes):通过方法名和参数类型返回公有方法 Method对象。参数parameterTypes是Class数组,指定方法的参数列表。
- Method getDeclaredMethod(String name, Class… parameterTypes):通过方法名和参数类型返回方 法Method对象。参数parameterTypes同上。
现有一个Person类:
public class Person {
public String name;
public int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setNameAndAge(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
现在编写一个程序通过反射机制调用Person类setNameAndAge和getName方法,具体代码如下:
import java.lang.reflect.Method;
public class HelloWorld {
public static void main(String[] args) {
try{
Class clz = Class.forName("Java反射机制.调用方法.Person");
// 调用默认构造方法
Person person = (Person) clz.newInstance();
System.out.println(person);
// 1.指定参数类型
Class[] params = new Class[2];
// 第一个参数是String
params[0] = String.class;
// 第二个参数是int
params[1] = int.class;
// 2.获取setNameAndAge方法对象
Method method = clz.getMethod("setNameAndAge",params);
// 3。设置传递参数
Object[] argObjs = new Object[2];
// 第一个参数传递Tony
argObjs[0] = "Tony";
// 第二个参数传递21
argObjs[1] = 21;
// 4.调用setNameAndAge方法,person是要调用的对象,argObjs是设置要传递的参数值
method.invoke(person,argObjs);
System.out.println(person);
// 获取getName方法对象,该方法没有参数
method = clz.getMethod("getName");
// 调用getName方法
Object result = method.invoke(person);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
Person{name='null', age=0}
Person{name='Tony', age=21}
Tony
以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!