java中反射操作公共成员变量

来源:互联网 发布:网络保密协议范本 编辑:程序博客网 时间:2024/06/08 09:52



java中 反射public成员变量(字段) 




通过反射运行public变量流程

1. 通过反射获取该类的字节码对象

Class clazz = Class.forName("com.heima.Person");

2. 创建该类对象

Object p = clazz.newInstance();

3. 获取该类中需要操作的字段(成员变量)

getField(String name) --> 方法传入字段的名称.

注意: 此方法只能获取公共的字段

Field f = clazz.getField("age");

4. 通过字段对象中的方法修改属性值

void set(Object obj, Object value)  --> 参数1): 要修改那个对象中的字段,参数2):将字段修改为什么值.

f.set(p, 23);



package com.itheima_01; import java.lang.reflect.Field; /* *通过反射获取成员变量并使用   *Field[] getFields()   *Field getField(String name)   * * Field[] getDeclaredFields()   * Field getDeclaredField(String name) * * Field: * Object get(Object obj)   * void set(Object obj, Object value)   */public class ReflectDemo3 {public static void main(String[] args) throws ReflectiveOperationException {//获取学生类的字节码对象Class clazz = Class.forName("com.itheima_01.Student");//获取学生类的对象Object stu = clazz.newInstance();//Field getField(String name)  :根据字段名称获取公共的字段对象Field f = clazz.getField("age");//获取成员变量对象//System.out.println(f);//void set(Object obj, Object value)f.set(stu,28);//通过成员变量对象,修改指定对为指定的值//Object get(Object obj)Object age = f.get(stu);//通过对象获取成员变量的值System.out.println(age);System.out.println(stu);} private static void method(Class clazz) {//Field[] getFields()  :获取公共的成员变量Field[] fs = clazz.getFields();for (int i = 0; i < fs.length; i++) {System.out.println(fs[i]);}System.out.println("----------");//getDeclaredFields()  :获取所有的成员变量Field[] fs2 = clazz.getDeclaredFields();for (int i = 0; i < fs2.length; i++) {System.out.println(fs2[i]);}}}



方法总结

             通过反射获取成员变量并使用  
                     Field[] getFields()              -->返回该类所有(公共)的字段
                     Field getField(String name)      -->返回指定名称字段
            
                    Field[] getDeclaredFields()      -->暴力反射获取所有字段(包括私有
                    Field getDeclaredField(String name) -->暴力反射获取指定名称字段

                    ---------------马上讲-----------------

              Field:
                      Object get(Object obj)          --> Field对象调用,返回传入对象的具体字段
                      void set(Object obj, Object value) -->  Field对象调用
                                                        参数1:要修改的对象
                                                        参数2:将此对象的字段修改为什么值.