反射操作公共成员变量

1.1.1 反射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);

1.1.2 案例代码

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);
 
}
 
System.out.println("----------");
 
//getDeclaredFields()  :获取所有的成员变量
 
Field[] fs2 = clazz.getDeclaredFields();
 
for (int i = 0; i < fs2.length; i++) {
 
System.out.println(fs2);
 
}
 
}
 
}

1.1.3 方法

通过反射获取成员变量并使用  
                     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: 将此对象的字段修改为什么值.

猜你喜欢

转载自blog.csdn.net/qq_40208605/article/details/88742062