method方法使用invoke钩子函数,类似student.act()。用invoke的方法可以避免与具体的某个类耦合。
Class<?> student=Class.forName("reflection.Student");
Object object=student.getDeclaredConstructor().newInstance();
String name="小帅子";
String setMethodName="setName";
String getMethodName="getName";
Method setMethod=student.getDeclaredMethod(setMethodName,String.class);
setMethod.invoke(object,name);
Method getMethod=student.getDeclaredMethod(getMethodName);
System.out.println(getMethod.invoke(object));
Method act=student.getDeclaredMethod("act");
act.invoke(object);
这里用到了student类,下面贴出student的类结构:
class Student implements IPerson{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student() {
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "姓名:"+name+"、年纪"+age;
}
@Override
public void act() {
System.out.println("上课");
}
}
- 通过Class.forName(全限定类名)。
- class.getDeclaredConstructor().newInstance()产生一个Object,(注意此方法在jdk1.9以后也适用。而class.newInstance在1.9以后被废弃了)。
- 通过获取到class.getDeclaredMethod(String 方法名,…参数(可变长参数))获取参数。
- 通过method.invoke(对象,…参数)调用方法。