1.通过反射得到对象的属性
通过得到Class对象然后调用一系列的get..方法可以得到
2.通过反射来调用类的普通方法
通过反射调用Student类的方法,即没有真正创建一个Student实例,而是用Object类来调用方法。
class Student{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Hello{
public static void main(String[] args) throws Exception{
String par = "name"; //需要操作的Student中的属性名
String val = "张三";
Class cls = Class.forName("hello.Student"); //获得Student类
//这里getMethod方法的第一个参数是cls中的方法名,后面的参数是方法中的参数类型。
Method set = cls.getMethod("set"+Hello.getMethodName(par), String.class);//获得Student的set方法
Object obj = cls.newInstance(); //获得Student实例
set.invoke(obj, val); //调用Student的方法
Method get = cls.getMethod("get"+Hello.getMethodName(par)); //获得Student的get方法
System.out.println(get.invoke(obj));
}
/**
* 该方法将字符串第一个字母变为大写
* @param str
* @return
*/
public static String getMethodName(String str) {
return str.substring(0, 1).toUpperCase()+str.substring(1);
}
}
输出:
张三
即通过反射实现了Student的方法setName,getName的调用
反射的好处在于,不局限于一个具体类型的对象,而通过Object类型来进行所有类的方法调用(具体的优点我还没有搞清楚)。