当前位置: MXJAVA > JAVA开发 > 文章正文

Java反射(一)

发表于 2008-10-02 | 阅读 162 views

  经过这两天的重构,Grape 的内核基本上已经完成了。和大多数 Java 框架一样,Grape 中同样使用了反射机制在运行期间创建对象实例。在此分次为大家简单介绍一下 Java 反射机制的使用。

  我们都知道,在 Java 中对象的实例是通过 new 关键字来创建的。不过,这种方法属于硬编码,不易改变,不灵活。比如在程序中硬编码创建的 Employee 对象,若要使用 Manager 来代替它,只能修改代码。Java 的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性。它可以让程序在运行期间加载编译期间不得而知的Class。并可以生成其实例、调用其方法、为其属性赋值。比如著名的 Hibernate 框架中就大量的使用了反射。本文通过简单的例子,简单介绍如何利用反射生成对象实例。

  1、利用反射创建对象实例。

  1. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 

  上面的代码是否很熟悉?我们经常使用的 JDBC 驱动加载就是使用反射完成的。以上代码仅加载了对象到内存,若要得要对象的实例只需调用 Class 的 newInstance 方法即可。

  2、创建构造中带有参数的对象实例。

  Java 允许一个类拥有多个构造方法,并且可以在构造对象时传入参数用来初始化对象。比如 Employee 对象的构造方法需要一个 String 的参数,用来告诉其 id 。

  1. public class Employee { 
  2.     private String id; 
  3.      
  4.     public Employee(String id) { 
  5.         this.id = id; 
  6.     } 

  在利用反射创建 Emplyee 对象时,我们必需为其创建 Constructor 对象,用来反映此 Class 对象所表示的类或接口的指定构造方法。

  1. // 生成class 
  2. Class cls = Class.forName(className); 
  3. // 参数类型 
  4. Class[] types = new Class[] { String.class }; 
  5. // 类数值对象 
  6. Object[] values = new Object[] { "001" }; 
  7. // 找到指定的构造方法 
  8. Constructor constructor = cls.getDeclaredConstructor(types); 
  9. // 设置安全检查,访问私有构造函数 
  10. constructor.setAccessible(true); 
  11. // 创建对象 
  12. Employee e = (Employee) constructor.newInstance(values); 

  利用以上方法,我们就可以在运行期间加载创建对象实例,程序的灵活性也随之大大提高。

——————————- 音乐分割线 ——————————-

音频片段:需要 Adobe Flash Player ( 9 或以上版本) 播放音频片段。 点击这里下载最新版本。您需要开启浏览器的 JavaScript 支持。

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网 关键字: ,
喜欢MXJAVA的文章,那就通过 RSS Feed 功能订阅阅读吧!

我要评论

*

* 绝不会泄露



返回首页 | 关于我们 | 联系我们 | 广告合作 | 友情链接 | 版权声明