定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
package cn.itcast.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class reflectDemo {
/**
* @param args
* @throws RuntimeException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws NoSuchMethodException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException, RuntimeException {
getConstructor();
}
public static void getConstructor() throws ClassNotFoundException, NoSuchMethodException, RuntimeException, InstantiationException, IllegalAccessException, InvocationTargetException
{
Class clazz = Class.forName("cn.itcast.JavaBean.Person");
Constructor constructor = clazz.getConstructor(String.class,int.class);
Method method = clazz.getMethod("setName", String.class);
Object obj = constructor.newInstance("小强",29);
method.invoke(obj, "李四");
}
}
package cn.itcast.JavaBean;
public class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
System.out.println("name:"+name+"age:"+age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println(name);
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}