定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
public class Person {
String name;
int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "name:"+name+'\t'+"age:"+age;
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@SuppressWarnings("all")
public class SetPerson {
private String clazzName;
private Class clazz;
private Object obj;
//获得该类的class对象,并创建对象
private void set(String className) throws Exception{
this.clazz=Class.forName(className); //获得该类的class对象
Constructor con= clazz.getConstructor(String.class,int.class); //获得类的构造器
obj= con.newInstance("张三",20); //创建实例
}
//设置年龄
private void setAge(int age) throws Exception{
Field f= clazz.getDeclaredField("age"); //获得类属性
f.setAccessible(true);//就是这么霸道
f.set(obj, age);
}
//调用方法
private void invoke(String name) throws Exception{
Method m = clazz.getDeclaredMethod("setName",String.class);
m.invoke(obj, name);
}
//来秀秀
public void show(String className,int age,String name){
try {
set(className);
System.out.println(obj);
setAge(age);
System.out.println(obj);
invoke(name);
System.out.println(obj);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//嗯 你才是老大 大哥你好
public static void main(String[] args) {
SetPerson setp=new SetPerson();
setp.show("com.refect.text.Person", 19, "汪皓");
}
}