黑马程序员技术交流社区

标题: 请高人讲解暴力反射 [打印本页]

作者: 回不去20128    时间: 2014-6-19 16:09
标题: 请高人讲解暴力反射
请哪位高人帮我讲解一下,反射还有暴力反射,我是一塌糊涂啊!!
作者: 郝九凤    时间: 2014-6-19 17:10
当一个类中的某种成分用private修饰后,它就好像是一种隐私,是不想让外部访问到的,你偏偏就想访问,这不就是有点强迫的意思,说的严重点,不就是暴力了吗?
作者: 张然龙    时间: 2014-6-19 19:01
本帖最后由 张然龙 于 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函数....


作者: 帅哥哥    时间: 2014-6-19 20:48
就是用反射技术拿到类中的私有成员~
作者: 北雁南飞    时间: 2014-6-20 00:10
就是通过反射,setAccessible()方法,配合拿到类中的私有的成员;本来经过private修饰的成员只能被本类使用,仅仅用反射也无法访问私有内容,必须加上setAccessible(),强行设置后才可以访问。这就是暴力放射!
作者: 回不去20128    时间: 2014-6-20 09:42
张然龙 发表于 2014-6-19 19:01
能补充的也就这么多了,主要是注意那个函数中的Declared,还有那个setAccessible函数....

...

非常之感谢
作者: 张然龙    时间: 2014-6-20 10:54
回不去20128 发表于 2014-6-20 09:42
非常之感谢

不客气 呵呵:)




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