A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】反射操作公共成员变量

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 案例代码
[AppleScript] 纯文本查看 复制代码
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: 将此对象的字段修改为什么值.
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马