JAVA资格认证(Java反射机制系列:例子分析)

JAVA资格认证(Java反射机制系列:例子分析),第1张

JAVA资格认证(Java反射机制系列:例子分析),第2张

在上一篇文章中,我们通过实例学习了如何使用反射机制创建对象、获取类变量和调用方法。创建对象的语句是class cla = class . forname(type);object obj = cla . new instance();这里,newInstance()实际上使用了这个类的默认无参数构造方法。如果要调用其他的构造方法,会稍微复杂一点。比如我们要创建一个StringBuffer对象,new操作符应该是string buffer br = new string buffer(" example ");使用反射机制有以下步骤。
首先,获取StringBuffer类的描述。
Class cla = Class . forname(" Java . lang . string buffer ");其次,创建一个参数类型class []的数组。class[]para types = new class[1];paraTypes[0]= string . class;然后,通过cla和paraTypes获得构造函数对象。
Constructor Constructor = cla . get Constructor(para types);然后,创建传入参数列表对象[]。object[]paralists = new object[1];paraLists[0]= " color ";最后,我们得到了我们想要的。object obj = constructor . new instance(paraLists);如果我们的paraTypes和paratypes设置为null或者长度为0,我们可以按照上面的步骤调用StringBuffer的无参数构造方法。同样,我们可以调用对象中的参数化方法。比如我们做如下操作br.insert(4,' u ' u ');;它是通过如下的反射机制实现的。
Class[]paratypes = new Class[]{ int . Class,char . Class };
Method Method = cla . get Method(" insert ",paratypes);
Object[]paralists = new Object[]{ 4,' u ' };
method.invoke(obj,paralists);
反射机制为我们提供了在运行时确定对象类型的便利,但它也有明显的缺点。
1、代码笨拙冗长。比如原本是一个br.insert(4,' u ' u ');;现在能解决的问题需要四句话。
2、失去编译时类型检查的好处。这使得你不得不处理更多的异常情况。
3、性能损失。使用反射机制运行更长时间。
中给出的建议是“普通应用在运行时不应该以图像的形式访问对象,只在非常有限的情况下使用”。那么反射机制会用在哪里呢?一些熟悉的应用是我们的IDE和一些框架。比如eclipse,编程时弹出的ctrl+space的建议就是使用反射机制。例如,Spring读取配置文件并生成相应的对象。还将使用RPC系统。对于一般的应用软件,可以在工厂方法中使用。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » JAVA资格认证(Java反射机制系列:例子分析)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情