黑马程序员技术交流社区

标题: 什么是暴力反射 [打印本页]

作者: wangkerui    时间: 2014-5-8 19:30
标题: 什么是暴力反射
本帖最后由 wangkerui 于 2014-5-10 18:02 编辑

什么是暴力反射啊,听力张老师的讲解还是不太明白,求指导啊!最好有实例是的

作者: 曹冬明    时间: 2014-5-8 19:38
本帖最后由 曹冬明 于 2014-5-8 19:40 编辑

反射里的Constructor,Field,Method三个类都有一个getDeclaredXxx方法,可以不受权限控制的获取类的构造函数,字段,方法,如果想要私有构造函数创建对象,字段赋值,方法调用的话,会自动的访问类的isAccessable,默认的是false,所以,你要想访问类中的私有成员的时候,就要调用setAccessable方法,将其改为true,这样,你就可以对类中的私有成员进行操作了
作者: xiaochen33520    时间: 2014-5-8 20:21
很简单,就是当一个类中成员是私有的, 必须通过getDes*****方法来调用,并调用setAccessible(true);然后才能用。这个就是暴力反射
作者: 陈妙俊    时间: 2014-5-8 21:01
如果成员变量是私有的,那么getField方法将获取不到该变量,这时需要方法getDeclaredField方法获取,但是获取了该变量也不能取出指定对象对应的变量值,这时需要设置标志.setAccessible(true);这样就能获得对象的变量值了。这个过程是强取,即暴力反射。
作者: 大漠孤烟    时间: 2014-5-8 21:34
展示片段:
反射成员变量:Field 类代表某个类中的成员变量
     //1.获取Class对象
     Class clazz=Class.forName("com.itheima.bean.Person")
             Object obj=clazz.newInstance();  //初始化
     //fl 对象存储的是Person类country 属性值和它所属的对象
     Field fl = clazz.getField("country"); //getField()获得的public 共有的成员country(国家)
   
     //暴力反射  ,getField只能访问共有的成员属性,私有成员的getDeclaredField
     Field fl2 = clazz.getDeclaredField("name"); //获取类成员,包括private私有的成员
           fl2.setAccessible(true);//这时需要设置标志,setAccessible 默认是false
       强制获取私有成员信息,即暴力反射。
作者: 张耀扬    时间: 2014-5-9 23:14
上面的都解释的很好.......
作者: 新生小周    时间: 2015-2-26 23:24
一切私有的在暴力反射面前都会暴露本性,个人感觉如果各种封装是一道墙,反射就是迂回到墙后釜底抽薪
作者: godot    时间: 2015-3-25 14:26
我也懂了
作者: 爱如kongcheng    时间: 2015-5-7 16:37
很好,好像懂一些了

作者: 王大侠    时间: 2015-5-20 20:00
学习了                     
作者: 少年闰土    时间: 2015-6-24 21:54
就是本来通过类对象不能使用的一些特性,通过反射就破解了,上面大家都说的不错 学习了
作者: 路人乙1989    时间: 2015-7-14 00:10
曹冬明 发表于 2014-5-8 19:38
反射里的Constructor,Field,Method三个类都有一个getDeclaredXxx方法,可以不受权限控制的获取类的构造函 ...

写的很明白,终于懂了。非诚感谢
作者: 以梦为码    时间: 2015-7-24 17:42
懂了
               
作者: kamo    时间: 2015-10-9 20:24
学习了,,,3q
作者: public_叶鹏    时间: 2015-11-14 16:49
不错哦~~~~~~~~~~~~~~
作者: public_叶鹏    时间: 2015-11-14 16:51
新生小周 发表于 2015-2-26 23:24
一切私有的在暴力反射面前都会暴露本性,个人感觉如果各种封装是一道墙,反射就是迂回到墙后釜底抽薪 ...


作者: 伊人风轻    时间: 2016-8-6 11:36
太棒了~~~~~~~~~·




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