反射:通过反射获取成员变量并使用

来源:互联网 发布:python官网下载有64 编辑:程序博客网 时间:2024/05/16 05:55
首先建一个实体类,用于数据访问
package star.july.entity;public class Student {private String name;int age;public String address;public Student() {super();}//私有构造方法private  Student(String name) {super();this.name = name;}public Student(String name, int age) {super();this.name = name;this.age = age;}public Student(String name, int age, String address) {super();this.name = name;this.age = age;this.address = address;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", address="+ address + "]";}}



反射结果:
package star.july.dao;import java.lang.annotation.Annotation;import java.lang.reflect.Constructor;import java.lang.reflect.Field;/** * 反射:通过反射获取成员变量并使用 * @author Starjuly * */public class PrivateField {public static void main(String[] args) throws Exception {//获取字节码文件Class clazz = Class.forName("star.july.entity.Student");//Constructor con = clazz.getConstructor();  //获取公共的构造方法Constructor con = clazz.getDeclaredConstructor();   //获取所有的构造方法//创建实例Object obj = con.newInstance();//获取数据类型:公有的Field addressField = clazz.getField("address");//给该对象的数据类型赋值addressField.set(obj, "广州");System.out.println(obj);//对私有的数据类型进行获取Field nameField = clazz.getDeclaredField("name");//要进行暴力反射才能访问私有类型nameField.setAccessible(true);//赋值nameField.set(obj, "徐凤年");System.out.println(obj);}}



0 0
原创粉丝点击