import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
//通过该类对应的Class对象创建对象
public class CreatObject {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
Class<User> userClass = User.class;
// Constructor<User> declaredConstructor = userClass.getDeclaredConstructor(String.class);//获得构造器
// User user = declaredConstructor.newInstance("易恒");//通过构造器创建
// System.out.println(user);
User user1 = userClass.newInstance();//直接用过无参构造创建对象
//通过反射获取方法
Method setName = userClass.getDeclaredMethod("setName", String.class);
setName.invoke(user1, "易恒");
System.out.println(user1.getName());
//通过反射获取属性
User user2 = userClass.newInstance();//新建一个实例
Field name = userClass.getDeclaredField("name");//得到指定的属性
//因为name属性在User类是私有的,所以外部访问不了
//关闭安全检测就能访问 true:关闭
name.setAccessible(true);
name.set(user2,"易恒1");
System.out.println(user2.getName());
}
}
class User{
private String name;
public User() {}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
}
【注解和反射7】通过类的Class对象创建对象
于 2022-05-13 16:46:37 首次发布