public class ReflectionDemo2 {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
//通过反射获取类的class对象
Class c1 = Class.forName("User2");
//构造一个对象
User2 user2 = (User2)c1.newInstance(); //本质是调用类的无参构造器
System.out.println(user2);
//通过构造器创建对象
Constructor constructor = c1.getDeclaredConstructor(String.class,Integer.class);
User2 user22 = (User2)constructor.newInstance("he",0);
System.out.println(user22);
//通过反射调用方法
Method setName = c1.getDeclaredMethod("setName", String.class);
setName.invoke(user2,"调用setName设置新的name");
System.out.println("新的name:"+user2.getName());
//通过反射操作属性
Field name = c1.getDeclaredField("name");
//如果属性是使用private来修饰,则需要
name.setAccessible(true);
name.set(user2,"通过反射操作属性设置的name");
System.out.println("通过反射操作属性设置的name:"+user2.getName());
}
class User2{
private String name;
private Integer age;
public User2() {
}
public User2(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}