黑马程序员技术交流社区
标题:
关于反射的提问
[打印本页]
作者:
ㄗ灬Night|K
时间:
2013-10-10 13:40
标题:
关于反射的提问
本帖最后由 ㄗ灬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"));
反射的优势在什么地方?直接创建不是更简单吗,什么时候会用到反射呢?
作者:
喝龙血的我
时间:
2013-10-10 13:49
这个只是一个使用反射的例子,反射主要是用来搞框架的。原理:把java类的各个成分(字段,方法,构造函数,参数类型等)用特殊的java类描述出来供程序员观看。
老师的说法是:现在写的类要调用将来写的类,我们先针对接口进行调用,将来的类需要实现接口,那么方法就固定了。但是将来写的类的类名我们无法获知,这时就需要调用者通过配置文件告诉框架具体的类名。
作者:
曾振华
时间:
2013-10-10 13:59
做基础框架的时候会用得上,一般应用层面很少,基本现在很多开源框架都已经给你封装好了,自己基本用不着写。典型的除了Hibernate之外,其实Spring也用到了。经典的就是xml或者properties里面写上了配置,然后在Java类里面解析xml或properties里面的内容,得到一个字符串,然后用反射,根据这个字符串获得某个类的实例,这样就可以动态配置一些东西,不用每一次都要在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护起来就很方便了,同时有时候要适应某些需求,Java类里面不一定能直接调用另外的方法,这时候也可以通过反射机制来实现。
作者:
诗化了邂逅
时间:
2013-10-10 14:39
运用反射可以在程序中可以检查某个类中的方法属性等信息,并且能够动态调用。例如,要把一个对象中的数据copy到另外一个对象中,规则是属性名相同就copy。用反射来做,不需要指定属性的名字,只要动态从类中获得信息,再判断属性名是否相同就可以。
反射还可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。hibernate的延迟载入,spring的AOP都是这么实现的。
作者:
郑齐育
时间:
2013-10-10 15:40
引用视频里最经典的一句话,反射就是把java类中的各个成分映射成相印的java类,也就是说可能我们只知道类的名字,甚至连类的名字都还没确定(例如通过后面从配置文件中获取),这样就降低了程序的耦合性,例如在基础视频中提到的将PCI定义为接口,当需要为主板扩展功能时只需实现该接口就能创建新的pci实现类。而视频中关于jdbc的例子,你可以参考java学习线路里的jdbc例子,里面有视频讲到反射和动态代理。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2