黑马程序员技术交流社区

标题: 【郑州校区】反射操作私有成员变量 [打印本页]

作者: 我是楠楠    时间: 2019-3-21 14:45
标题: 【郑州校区】反射操作私有成员变量
【郑州校区】反射操作私有成员变量

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口出






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2