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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】反射操作私有成员变量

1.1.1 反射private成员变量(字段)
反射private属性执行流程
1. 获取学生类字节码对象
2. 获取学生对象
3. 通过getDeclaredField方法获取私有字段
4. 通过setAccessible让jvm不检查权限
5. 通过set方法设置对象为具体的值
1.1.2 案例代码
[AppleScript] 纯文本查看 复制代码
package com.itheima_01;

 

import java.lang.reflect.Field;

 

/*

 *        通过反射获取私有成员变量并使用  

 *         Field[] getDeclaredFields()  

 *         Field getDeclaredField(String name)

 */

public class ReflectDemo4 {

public static void main(String[] args) throws ReflectiveOperationException {

//获取学生类的字节码对象

Class clazz = Class.forName("com.itheima_01.Student");

//获取学生对象

Object stu = clazz.newInstance();

//获取私有的字段对象

Field f = clazz.getDeclaredField("name");

f.setAccessible(true);//设置反射时取消Java的访问检查,暴力访问

//System.out.println(f);


f.set(stu, "lisi");


Object name = f.get(stu);

System.out.println(name);

}

 

}
1.1.3 方法总结
               Field[] getDeclaredFields()      --> 暴力反射获取所有字段(包括私有)
               Field getDeclaredField(String name) --> 暴力反射获取指定名称字段
               void setAccessible(boolean flag) --> 让jvm不检查权限
传智播客·黑马程序员郑州校区地址
河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

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