当获得某个类的对应的Class对象后,就可以通过该Class对象的getMethod方法和getMethod方法获得Method对象和数组,每个Method对象对应一个方法,获得Method对象后,调用invoke方法来调用这个方法,实例如下:
class Student extends Person
{
private String name;
private Student(){};
public Student(int age,String name) {
super(age);
this.name = name;
}
public String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
}
public class ReflectExample {
public static void main(String[] args) throws Exception{
//getMethods返回所有的public的方法,包括从父类和接口继承来的方法
//getDeclaredMethods返回该类声明的所有方法,包括私有的和受保护的
Method[] method=Student.class.getDeclaredMethods();
System.out.println(Arrays.asList(method));
//返回该方法的修饰符对应的整形
System.out.println(Modifier.isPublic( method[0].getModifiers()));
//调用Student中的set方法,如果该方法是private或者是protected时,调用会发生
//Class com.reflect.ReflectExample can not access a member of class com.reflect.Student with modifiers "private"
Student stu=new Student(12, "zhangsan");
Method m1=Student.class.getDeclaredMethod("setName", String.class);
//设置可访问
m1.setAccessible(true);
m1.invoke(stu, "lisi");
System.out.println(stu.getName());
}
}