首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

java 反照机制(转)

2012-08-28 
java 反射机制(转)(一) 初识Java ReflectionJava 反射机制是指Java程序可以在执行期载入,探知,使用编译期

java 反射机制(转)
(一) 初识Java Reflection
    Java 反射机制是指Java程序可以在执行期载入,探知,使用编译期间完全未知的classes.这句话可能有点难以理解,我们可以通过一个例子来看。在Java程序中我们经常会用到这样一条语句来创建一个对象。Date date = new Date();在这条语句中date的类型(Java.util.Date)在编译时 已经确定。那么,有没有办法使我们把对象类型的确定时间由编译转到运行,答案是肯定的。这就是Java反射机制所提供的便利。而且它不单单可以生成对象还可以获取Field,对Field设值,及调用方法等。

  主要有三种方法。

  二,通过.Type或.class属性获得。Class cla = String.class;Class cla1 = int.Type;

  如上所示实例对象cla就是对String类型的描述,通过它我们就可以创建一个String实例,并调用其中的方法。下一篇我将通过一个例子来展示如何使用Java反射机制。

(二)例子
  下面我以顾客买相机为例来说明Java反射机制的应用。例子中涉及的类和接口有:

  Camera接口:定义了takePhoto()方法。

  Camera01类:一种照相机的类型,实现Camera接口。

  Camera02类:另一种照相机的类型,实现Camera接口。

  Seller类:卖照相机。

  Customer类:买相机,有main方法。

  所有类都放在com包里

  程序如下:

Class[] paratypes = new Class[]{int.class,char.class};Method method = cla.getMethod("insert", paratypes);Object[] paralists = new Object[]{4,'u'};method.invoke(obj, paralists);

  反射机制给予我们运行时才确定对象类型的便利,然而它也有显著的缺点。

  1,代码笨拙冗长。比如本来一句br.insert(4, 'u');可以解决的问题现在要用到四句。

  2,损失了编译时类型检查的好处。这使得你要对付更多的异常。

  3,性能损失。用反射机制运行的时间更久。

  <<Effective Java >>中给出的建议是“普通应用不应在运行时刻以映像方式访问对象,只是在很有限的情况下使用“。那么在什么地方会用到反射机制呢。已有的较熟悉应用是我们的IDE及一些框架。比如eclipse,编程时ctrl+space弹出的建议就是用到反射机制。比如Spring读取配置文件后生成对应的对象。还有RPC系统也会用到。对于一般的应用软件,你可以在工厂方法中用到它。

热点排行