黑马程序员技术交流社区

标题: 关于反射有点想不明白。。。 [打印本页]

作者: 冯培军    时间: 2012-9-25 15:25
标题: 关于反射有点想不明白。。。
    反射:表示java类的Class类显然要提供一系列的方法,来获得其中的变量、方法、构造方法、修饰符、包、等信息,
    这些信息就是用相应类的实例对象来表示,它们是Field、Method、Constructor、Package等。。。
    反射有有一个应用:可以访问私有成员
    比如:fieldAge.setAccessible(true);  // 暴力访问,也叫暴力反射
    这样就可以对私有成员age进行操作了, 问题是我们定义为私有, 就是不想让别人知道,不想让做其他操作,
    可是  为什么java还要提供这样的访问机制呢?
作者: 赵宇    时间: 2012-9-25 15:37
定义了,这么一个机制,但是很少应用,以为他打破了面向对象封装的思想。
你只要知道,有这么回事,知道怎么用就可以了
其实反射以后用到的也少,我们大部分面对的都是框架了
但是学习理解了反射,对我们理解和应用框架更明朗。
作者: 罗磊    时间: 2012-9-25 18:52
赵宇 发表于 2012-9-25 15:37
定义了,这么一个机制,但是很少应用,以为他打破了面向对象封装的思想。
你只要知道,有这么回事,知道怎 ...

支持该哥们的说法!就像有很多网上信息!国内不让访问!但是你可以通过翻墙也能访问到!这也算是给某些人流一条后门吧!程序来源于生活!和谐社会!该不暴力的就尽量不要暴力吧!:lol
作者: 杨华东    时间: 2012-9-25 20:16
大家有没有听说  Java的沙盒机制???防病毒用的,估计一些蛋疼的黑客就是绕过沙盒,暴力反射了一把!!把我们封装的信息全部给暴露了!!!联系实际生活,这样一想感觉 编程语言  真的没有安全可言!!!!!!总会有些疯子 恐怖分子  把无辜的人夺取了生命!!!   
哥们嗨起来。。。。。。。
作者: 苏文俊    时间: 2012-9-25 21:14
      从java的安全机制上来讲,使用private修饰只是怕你误用,而不是禁用。只是你在访问这些私有成员是通过一系列的"手段"来实现,比如反射。
很多情况下,我们把方法,属性指定为private,以确保他们不会在包内的其他地方“误用”它,以防你不小心去修改或者删除这个方法或属性!
    反射技术在框架技术里面的应用很广泛,在框架技术环境下的情况比较复杂,必须有一定的手段来保障私有属性,方法的安全,因此private的初衷和通过反射技术使用它们在意义上并不冲突!
作者: 张小龙    时间: 2012-9-25 21:46
其实只要楼主看了张老师的高新技术视频,就能明白个大概了
比如说有个程序需要两个人来共同完成,一个人需要另一个人的的类
但是,如果另一个人没有把类写完,这时候第一个人是没有办法编译的
不过,java反射就能很好的解决这个问题:
在没有第二个人完成的类的情况下,可以通过反射机制来完成自身代码的编译
就像张老师说的,我在写程序的时候,你可能还在读小学,那我不可能等你读完书在来编译代码吧
所以有了反射机制,就可以不用等待直接编译,但是运行还是需要传入你完成的类。
但是正因为反射有这种访问私有成员的办法,所以,反射一般用来做框架,正常代码中应该是很少见到的吧
作者: 许云龙    时间: 2013-8-17 21:18
在网络上找来了一个回答,我觉得说的很有道理
对于软件开发人员来说,单元测试是一项必不可少的工作。它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在。但是,在写单元测试的过程中,开发人员经常要访问类的一些非公有的成员变量或方法




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