黑马程序员技术交流社区
标题:
java反射机制中问题
[打印本页]
作者:
陈欢
时间:
2012-7-28 01:48
标题:
java反射机制中问题
在java反射机制中可以调用到私有方法,会不会破坏了java的封装性呢。也就是使java类变得不安全呢,这样用不矛盾吗?
刚学到反射不是很了解,求帮助啊。
作者:
高鑫
时间:
2012-7-28 02:50
所以为什么叫暴力反射啊,是强制性的,不管愿不愿意都要拿来,类似抢劫,必须拿来。拿过来的只是内存中的二进制码
作者:
金_鑫
时间:
2012-7-28 02:54
从它们的概念以及特性说一下:
封装性是指对外隐藏对象的属性和实现细节,仅对外提供公共的访问方式(封装应该是一种思路、思想 )。
反射是通过对象找到类,既然找到类了,那么我们就可以得到这个类的成员结构了,例如这个类的属性和
方法,即使是private的也能得到,你想,现在这个类我都得到了,那么这个类中的所以东西我肯定是都
得到了,我现在只是得到了这个类的成员,并没有说是在外部访问这个类的private的东西。这并没有破
坏面向对象的封装性
从它们的实际操作说一下:
JAVA反射机制主要提供了以下功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类所具有的成员变量和方法
4.在运行时调用任意一个对象的方法
java的封装性
类的封装既是不能让外面的类随意的修改一个类的成员变量;
在定义一个类的成员,使用private关键字讲明了成员的访问权限,只能这个类的其他成员方法调用,而不被其他类中的方法所调用;
作者:
侯宪博
时间:
2012-7-28 07:43
看来楼主是对反射的理解不够深
不知道反射存在的意义
形象点给你说吧
比如有一家汽车生产的公司,造出来的汽车都是四个轮子
并且声明我们造的汽车就是四个轮
谁偷摸改我们的汽车那就是侵权,是要吃官司的
但是为了照顾喜欢改车车的用户,我们提供了专门的汽车修配厂
想改车,到我们的汽车修配厂,我们给你改
这个轮子的数量就相当于私有的属性
汽车修配厂就相当于对外暴露的改车轮的方法
外部没有权利直接改变他们所生产的汽车的轮子的数量
所以只能通过他们对外提供的修配厂改装
而反射机制呢就相当于一个资深的工程师
他看这个汽车一眼就能看透这个汽车的全部构造
然后他就能学会制造这种汽车
但此时他也仅仅是制造,他是不敢直接改装人家公司已经生产好的汽车轮子的
由此可见java为你提供了这样一个工程师
是为了让你可以制造出你所见过的汽车,并可以学会开它
实在想改装但又不想去汽车修配厂??好说,让你的工程师替你去(提高动态性)
而这个工程师呢是没有权利去直接改装别的公司已经生产好的汽车的
这个例子呢有它的不形象的地方,但还是可以帮助你理解反射机制的
希望对你有所帮助。。。
作者:
吴立杰
时间:
2012-7-28 07:58
不会,楼主首先要明确暴力反射的用途:暴力反射是在后期你的程序需要推展功能的时候,你对外提供一个接口,后期推展功能的开发者只需实现你这个接口去推展他自己的功能,而你只需要在你的程序内部用反射获取这个开发者的类即可,但他必须按照你给他的属性文件填写相关内容,例如:类名,方法名等。所以暴力访问是有前提的,如果你不知道它们的名字和参数列表,不知道那些字段的名字,你要怎么访问?
还有解释下类中成员属性私有的模式为专家模式,你要搞一个类,这个类拥有什么属性内容你不想让除了本类的任何类知道,那么你就私有。
楼主仔细看看张孝祥老师的基础加强课程,那里面反射讲的很清晰了,一点小建议,忘采纳。加油!
作者:
李菁
时间:
2012-7-28 10:08
封装性是指对外隐藏对象的属性和实现细节,只对外提供公共的访问方法。
反射是通过对象找到类,既然找到类了,就可以得到这个类的属性和方法
作者:
金_鑫
时间:
2012-7-28 18:39
对象的属性SET/GET方法是共有的,可以通过反射机制去找到各个属性的SET方法设值。反射机制主要是通过组装方法来设值的,先找到定义的各个属性名,再根据属性名组装相应的SET方法
作者:
金_鑫
时间:
2012-7-28 18:39
对象的属性SET/GET方法是共有的,可以通过反射机制去找到各个属性的SET方法设值。反射机制主要是通过组装方法来设值的,先找到定义的各个属性名,再根据属性名组装相应的SET方法
作者:
金_鑫
时间:
2012-7-28 18:39
对象的属性SET/GET方法是共有的,可以通过反射机制去找到各个属性的SET方法设值。反射机制主要是通过组装方法来设值的,先找到定义的各个属性名,再根据属性名组装相应的SET方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2