反射
1.什么是反射:在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。
第一步 我们先创建一个类
//实体类 entity public class User{ private int id; private String name; private int age; public User() { } public User(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
第二步操作这个user类
//动态的创建对象,通过反射 public class Test06 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException { //Class.forName获取User的class类 Class c1 = Class.forName("hj.reflections.User"); //通过User的calss类调用newInstance方法构造一个对象 User user = (User) c1.newInstance(); //本质是调用了类的无参构造器 System.out.println(user); //通过构造器创建对象 Constructor constructor = c1.getDeclaredConstructor(int.class,String.class,int.class);//获取对象的构造器 User user1 =(User) constructor.newInstance(10,"小黄", 20);//创建对象 System.out.println(user1); //通过反射调用方法,先创建一个对象 User user3 = (User) c1.newInstance(); //通过反射获取setName方法 Method setName = c1.getMethod("setName", String.class); //invoke:激活的意思(对象,方法的值) setName.invoke(user3,"啊黄"); System.out.println(user3); //通过反射操作属性 User user4 = (User) c1.newInstance(); Field name = c1.getDeclaredField("name"); //不能操作私有属性,我们需要关闭程序的安全检测,属性或者方法的setAccessible(true) name.setAccessible(true); name.set(user4,"啊俊"); System.out.println(user4); } }
浙公网安备 33010602011771号