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

© wangkerui 中级黑马   /  2014-6-1 23:40  /  1009 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangkerui 于 2014-6-5 20:25 编辑

Java中的反射总是不好理解啊,有没有什么生活中的例子可以帮助理解反射的?

4 个回复

倒序浏览
反射,是得到java类的所有成分映射的实例的对象,比如getClass得到这个类的字节码实例  ,Method得到的是类中的方法的字节码实例对象,Fields得到类中所有的字段的实例,加了个s代表复数,和英语一样, Constructors得到构造方法的字节码实例对象;,比如Methods得到类中所有的方法的字节码文件,可以反射遍历出所有的方法,可以以方法名获取指定的方法,在获取其中的字段信息,就是一些变量,成员..,还要遍历出方法中的字段,获取指定的那个变量名,invoke()方法可以修改其值;这些java提供的方法行为,可以理解为 造汽车,汽车有发动机,变速箱,离合器,马达,等等所有的零器件,都有一个模板,一个做的方法,好多的铁的零件都是冲压出一个形状或新的结构体,如果没有模板,也没有做的方法,零件做不出来,也不会有汽车的说法是吗,反射其实就是得到一个实体对象,比如得到轮胎的对象,轮胎是不是有一个模板,有个做轮胎的方法,通过模板,方法,给你橡胶,是不是也能做出来呢,如果你对模板修改了下,圆形变成方的,是不是做出的轮胎是方的,这里不要笑,举例子吗,轮子的行为是不是旋转的了,而是一竖一倒在翻箱子似的,会到反射,通过这个方法的字节码文件得到它的实例,相当于得到了轮胎的模板对吧,java的反射就是这里的方法,得到实例对象,然后调用对象的方法(方法理解是java反射机制提供的),“天经地义吧”,老师说的一句话很经典,Method.invoke(对象,修改的值);当然也可以调用这个方法,输出运行结果,具体的方法自己找找,用c++尹晨老师的话说“可以为所欲为,就能实现这些猥琐的行为“,反射技术可以得到类中所有的字节码实例,前提给你类的class实例对象,一路狂反,类里有什么吐什么,要修改值也好,调用方法也罢,还是c里好,玩的是内存,前不久植物大战僵尸,老师讲的很好,可惜没录视频,没怎么学会,转学java,要回汇编语言,真他妈的蛋疼,不是一般的费劲,有些游戏中的物理指针,还是啥指针,反正地址是不变的,比如指针地址指向一个方法的首地址,可以调用游戏中的方法,那是什么的情况,想想特激动,那天我整了半夜,那个坑得的指针(方法的)调用没反应,貌似每次运行的地址不一样,就是植物大战的界面,不是鼠标离开界面,游戏暂停吗,调用方法后,会屏蔽这个方法,就是失效的意思,连第一个实现都没有实现,唉,后面的貌似很难,直接来个通关,彻底破坏游戏的规则,我是一个很喜欢破坏规则的人,觉得是一件很厉害的事情,但是现实中是一个很老实的小伙,只有这样才能得到旁人的认可,自己并不比别人差,或者优有而过之,这就是命运不堪的人的内心世界.......貌似说了很多,会觉得我....愿还在深夜忙碌的程序员有个好的未来,加油!
回复 使用道具 举报
楼上说的好详细~
回复 使用道具 举报
我是来向沙发学习的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马