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

来源:互联网 发布:情义无悔网络电影 编辑:程序博客网 时间:2024/06/05 03:20
package cn.itcast_03;import java.lang.reflect.Constructor;import java.lang.reflect.Field;/* * 需求:通过反射获取成员变量并使用 */public class ReflectDemo {public static void main(String[] args) throws Exception {// 获取字节码文件对象Class c = Class.forName("cn.itcast_01.Person");// 获取所有的成员变量// Field[] fields = c.getFields();// Field[] fields = c.getDeclaredFields();// for (Field field : fields) {// System.out.println(field);// }/* * Person p = new Person(); p.address = "北京"; */// 通过无参构造方法创建对象Constructor con = c.getConstructor();Object obj = con.newInstance();System.out.println(obj);// 获取单个的成员变量// 获取address并对其赋值// public void set(Object obj,Object value)// 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。Field addressField = c.getField("address");addressField.set(obj, "北京");// 给obj对象的addressField字段设置值为"北京"System.out.println(obj);// 获取name并对其赋值// NoSuchFieldException:没有这个字段异常Field nameField = c.getDeclaredField("name");// 暴力访问// IllegalAccessException:非法访问异常nameField.setAccessible(true);nameField.set(obj, "风清杨");System.out.println(obj);// 获取age并对基赋值Field ageField = c.getDeclaredField("age");ageField.setAccessible(true);ageField.set(obj, 27);System.out.println(obj);}}

0 0
原创粉丝点击