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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王莹 中级黑马   /  2012-6-24 07:02  /  2306 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王莹 于 2012-6-24 14:33 编辑

请问大家,反射到底有什么作用啊?
比如,我们在创建构造方法的实例对象时
通常:String str = new String (new StringBuffer ("abc"));
反射:String str =(String)constructor.newInstance(new StringBuffer("abc") )

明明通常的方法很简洁,反射定义一个实例对象那么复杂,那我们干嘛还要用反射呢?反射到底有什么好处呢?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
反射最大的特点是动态获取和加载。
另外,程序的简结不是你这样按照长度来计算的,比如你的
通常:String str = new String (new StringBuffer ("abc"));
反射:String str =(String)constructor.newInstance(new StringBuffer("abc") );
你到后面需要进行动态加载的时候,用反射写起来的代码会比你用通常写起来的代码要少的多的多

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
通过Java反射机制,可以再程序中访问已经装载的JVM中Java对象的描述,实现访问。检测和修改Java对象本身信息的功能。所以java的反射机制是必不可少的。。。{:soso_e100:}
回复 使用道具 举报
因为在今后工作中为了提高项目完成效率不可能所有代码都我们自己写,往往要用到别人的代码或者是借助框架解决实际问题,就要调用别人的类而在写程序时无法知道要被调用的类名,在程序中无法直接new 某个类的实例对象了,而要用反射方式来做。这儿崩急今后学框架的时候会深入的接触的。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
反射其实就是程序能够自检查自身信息。就像程序会照镜子反光看自己。

在程序中可以检查某个类中的方法属性等信息,并且能够动态调用。
这样可以写出很灵活的程序。
比如要把一个对象中的数据copy到另外一个对象中,规则是属性名相同就copy,
就可以用反射来做,不需要指定每个属性的名字,只要动态从类中取得信息,
再判断属性名是否相同即可。当然应用还有很多。

反射可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。
hibernate的延迟载入,spring的AOP都是这么实现的

反射给Java带来了一些动态性。不过虽然很好,但毕竟还是有一定局限性的。另外ASM,cglib使用还是不放便。因此一些纯动态语言现在是一个重要发展趋势,比如ruby,python等,程序很容易动态生成。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
ava反射机制能够知道类名而不实例化对象的状态下,获得对象的属性或调用方法。一般都是在配置文件中才用的。

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能:在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
回复 使用道具 举报
王莹 中级黑马 2012-6-24 14:32:32
7#
谢谢各位的回答,我好像有点了解了,我再自己研究一下~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马