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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 回不去20128 初级黑马   /  2014-6-19 16:09  /  1060 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请哪位高人帮我讲解一下,反射还有暴力反射,我是一塌糊涂啊!!

6 个回复

倒序浏览
当一个类中的某种成分用private修饰后,它就好像是一种隐私,是不想让外部访问到的,你偏偏就想访问,这不就是有点强迫的意思,说的严重点,不就是暴力了吗?
回复 使用道具 举报
本帖最后由 张然龙 于 2014-6-19 19:04 编辑
  1. public class Demo
  2. {
  3.         public static void main(String[] args)throws Exception
  4.         {
  5.                 //new一个Person对象
  6.                 Person person = new Person("张三");
  7.                
  8.                 //获得Person类的字节码文件对象
  9.                 Class cls = person.getClass();
  10.                
  11.                 //获取name属性,注意是getDeclarField,而不是getField,这个函数是可以获取到被private修饰的属性的
  12.                 Field field = cls.getDeclaredField("name");
  13.                
  14.                 //打破封装,将属性设置为可见
  15.                 field.setAccessible(true);
  16.                
  17.                 //获得Person类的name属性,并打印到控制台
  18.                 System.out.println(field.get(person));
  19.         }
  20. }

  21. class Person
  22. {
  23.         private String name;
  24.         Person(String name)
  25.         {
  26.                 this.name=name;
  27.         }
  28. }
复制代码

能补充的也就这么多了,主要是注意那个函数中的Declared,还有那个setAccessible函数....

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
就是用反射技术拿到类中的私有成员~
回复 使用道具 举报
就是通过反射,setAccessible()方法,配合拿到类中的私有的成员;本来经过private修饰的成员只能被本类使用,仅仅用反射也无法访问私有内容,必须加上setAccessible(),强行设置后才可以访问。这就是暴力放射!
回复 使用道具 举报
张然龙 发表于 2014-6-19 19:01
能补充的也就这么多了,主要是注意那个函数中的Declared,还有那个setAccessible函数....

...

非常之感谢
回复 使用道具 举报

不客气 呵呵:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马