黑马程序员技术交流社区

标题: 反射看了几遍 不太懂 [打印本页]

作者: caiyaoren    时间: 2014-7-10 22:08
标题: 反射看了几遍 不太懂
求大牛帮忙说说反射的用法。。我刚才做了题  离开了老师的视频 一点不会了   妈蛋!!!郁闷中

作者: caiyaoren    时间: 2014-7-10 22:09
越看越糊涂  难道说今天不适合看反射?
作者: Coup_D`etat    时间: 2014-7-10 22:19
同上,感觉张老师的视频没怎么看懂
作者: 燿陚√揚葳    时间: 2014-7-11 18:02
其实我觉得最主要是不懂,反射与new的区别吧,既然已经可以new了,为什么还要用到反射呢?反射来调用一个类的方法明显要比new对象调用方法复杂的多
说一下new和反射的区别希望对你有所帮助
基本上效果差不多,但是new对象,无法调用该类里面私有的东西,反射反之,不过反射需要以牺牲性能做代价
new属于静态编译,而反射属于动态编译,意思就说只有到运行时他才会去获得该对象的实例(这么说可能不太准确,你能理解就行)
比如:
spring框架是事先就写好的框架,他内部的处理并不知道用户要写哪些类,因为那是以后由用他的人来定的,这时候你还能在spring内部去new吗?所以用户在用的时候才去配置文件中配置类路径,这是一个典型反射的例子(这个视屏中也有相对应的代码就不写了)

new与反射的区别其实就是静态编译和动态编译的区别:
静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了。你写小程序没问题,但程序一大,加载的过程(就是当你运行程序时初始化的过程)就比较费力了......

动态编译就不一样了,你编译的时候那些模块都没有编译进去,一般情况下你可以把那些模块都编译成dll,这样你启动程序(初始化)的时候这些模块不会被加载,而是在运行的时候,用到那个模块就调用哪个模块。

简单的打个比方,我写个阅读器,支持txt,pdf,udm三种格式,暂时把读txt,读pdf,读udm定义为三个功能模块。 使用静态编译:我想看个txt,点击应用程序图标以后三个功能都加载进来了,判断格式,使用读txt模块。(在这里,另外两个模块的作用就是占用系统资源) 使用动态编译:我想看个txt,点击应用程序,判断格式,只加载读txt模块,使用读txt模块。

显然,动态编译1速度快,2节省了系统资源,3利于今后拓展。但是却降低了性能

希望对你有帮助

作者: 徐非    时间: 2014-7-11 18:08
学习了,谢谢
作者: caiyaoren    时间: 2014-7-11 20:41
燿陚√揚葳 发表于 2014-7-11 18:02
其实我觉得最主要是不懂,反射与new的区别吧,既然已经可以new了,为什么还要用到反射呢?反射来调用一个类 ...

恩  不管怎么说 谢谢你了
作者: huangqili    时间: 2014-7-11 20:48
建议结合视频和书籍看。。多做几个例子!!
作者: caiyaoren    时间: 2014-7-11 20:50
huangqili 发表于 2014-7-11 20:48
建议结合视频和书籍看。。多做几个例子!!

照着视频 会做   自己做就蒙了
作者: ★八月⊰~    时间: 2014-7-11 20:57
反射着确实很不好理解,不过这是学习三大框架的基础知识啊,必须掌握,推荐你一本书——《JavaWeb王者归来》
作者: 燿陚√揚葳    时间: 2014-7-11 21:16
caiyaoren 发表于 2014-7-11 20:41
恩  不管怎么说 谢谢你了

不客气的,这些网上都有说过,对照着代码多看几遍一定可以的
作者: 郑飞    时间: 2014-7-11 21:41
框架啊框架 迟早要学 早点啃下来吧 加油
作者: huangqili    时间: 2014-7-11 21:42
caiyaoren 发表于 2014-7-11 20:50
照着视频 会做   自己做就蒙了

没事,一开始模仿,后来自己思考,一定要理解当中的道理~
作者: caiyaoren    时间: 2014-7-12 21:29
燿陚√揚葳 发表于 2014-7-11 21:16
不客气的,这些网上都有说过,对照着代码多看几遍一定可以的

恩 我有时间再看看吧  今天又学习了File类
作者: 一十二。    时间: 2014-7-12 21:32
我在基础班,老师说反射就业班会讲的,




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