class User{
private String name;
private int id;
private int age;
public User() {
}
public User(String name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.使用反射构造一个User类的动态对象
1先获得User类的Class对象
Class c1 = Class.forName("注解和反射.User");//括号中是类的文件路径
2.获得类对象,有两种方式,提示:获取的对象可以直接调用公有的方法和属性 1.使用newInstance方法相当于调用类的无参构造函数创建对象,提示:其实newInstance方法已经被弃用,但还是可以通过它了解反射的机制
User user = (User) c1.newInstance()2.调用有参构造函数,传递初始值,需要先获取User类的有参构造函数
Constructor constructor=c1.getDeclaredConstructor(String.class,int.class,int.class);//获得User类的有参构造函数
User user=(User) constructor.newInstance("1", 1,18);
3.通过反射调用方法
//通过反射获取方法
Method setName = c1.getDeclaredMethod("setName", String.class);
//invoke :激活的意思
//(对象,方法需要传递的参数)
setName.invoke(user,"1");//使得获取的方法指向一个对象,并传递参数
System.out.println(user.getName());
4.通过反射操作属性
//通过反射操作属性
Field name = c1.getDeclaredField("name");//获得name属性,name是私有的
//不能直接操作私有属性,我们需要关闭程序的安全检测,使用属性或者方法.setAccessible(true)关闭
name.setAccessible(true);
name.set(user,"2");//使得获取的属性指向一个对象,并赋值



