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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ㄗ灬Night|K 中级黑马   /  2013-10-10 13:40  /  1374 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ㄗ灬Night|K 于 2013-10-10 16:30 编辑

看了张老师反射的视频,有点晕。。。。。
用反射获得的对象: Constructor constructor = String.class.getConstructor(StringBuffer.class);
                                tring str5 =(String) constructor.newInstance(new StringBuffer("abc"));


直接创建对象: String str2 = new String(new StringBuffer("abc"));


反射的优势在什么地方?直接创建不是更简单吗,什么时候会用到反射呢?


评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
这个只是一个使用反射的例子,反射主要是用来搞框架的。原理:把java类的各个成分(字段,方法,构造函数,参数类型等)用特殊的java类描述出来供程序员观看。
老师的说法是:现在写的类要调用将来写的类,我们先针对接口进行调用,将来的类需要实现接口,那么方法就固定了。但是将来写的类的类名我们无法获知,这时就需要调用者通过配置文件告诉框架具体的类名。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
做基础框架的时候会用得上,一般应用层面很少,基本现在很多开源框架都已经给你封装好了,自己基本用不着写。典型的除了Hibernate之外,其实Spring也用到了。经典的就是xml或者properties里面写上了配置,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射,根据这个字符串获得某个类的实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了,同时有时候要适应某些需求,Java类里面不一定能直接调用另外的方法,这时候也可以通过反射机制来实现。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
     运用反射可以在程序中可以检查某个类中的方法属性等信息,并且能够动态调用。例如,要把一个对象中的数据copy到另外一个对象中,规则是属性名相同就copy。用反射来做,不需要指定属性的名字,只要动态从类中获得信息,再判断属性名是否相同就可以。
      反射还可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。hibernate的延迟载入,spring的AOP都是这么实现的。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
引用视频里最经典的一句话,反射就是把java类中的各个成分映射成相印的java类,也就是说可能我们只知道类的名字,甚至连类的名字都还没确定(例如通过后面从配置文件中获取),这样就降低了程序的耦合性,例如在基础视频中提到的将PCI定义为接口,当需要为主板扩展功能时只需实现该接口就能创建新的pci实现类。而视频中关于jdbc的例子,你可以参考java学习线路里的jdbc例子,里面有视频讲到反射和动态代理。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马