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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯培军 中级黑马   /  2012-9-25 15:25  /  2513 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    反射:表示java类的Class类显然要提供一系列的方法,来获得其中的变量、方法、构造方法、修饰符、包、等信息,
    这些信息就是用相应类的实例对象来表示,它们是Field、Method、Constructor、Package等。。。
    反射有有一个应用:可以访问私有成员
    比如:fieldAge.setAccessible(true);  // 暴力访问,也叫暴力反射
    这样就可以对私有成员age进行操作了, 问题是我们定义为私有, 就是不想让别人知道,不想让做其他操作,
    可是  为什么java还要提供这样的访问机制呢?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

6 个回复

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

支持该哥们的说法!就像有很多网上信息!国内不让访问!但是你可以通过翻墙也能访问到!这也算是给某些人流一条后门吧!程序来源于生活!和谐社会!该不暴力的就尽量不要暴力吧!:lol
回复 使用道具 举报
定义了,这么一个机制,但是很少应用,以为他打破了面向对象封装的思想。
你只要知道,有这么回事,知道怎么用就可以了
其实反射以后用到的也少,我们大部分面对的都是框架了
但是学习理解了反射,对我们理解和应用框架更明朗。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马