编程开发

Java反射(一)

08-10-02 | 1 Comment |

  经过这两天的重构,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); 

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

——————————- 音乐分割线 ——————————-
[audio:http://www.langxi.net/mp3/03.mp3|autostart=yes]


五冠 Nokia/诺基亚 5230 5230XM 送证书V20版 内有港行 销数千台
1000.0元
批发 雷朋3025镜面反光太阳镜 太阳眼镜 19.9/副 顶级质量
19.9元
促销笔记本电脑 13.3英寸超薄N450无线网卡视频
1999.0元

  1. [...]   在《Java反射(一)》一文中,我们简单了解了利用 Reflection 机制在程序运行期间生成 Class 实例,今天我们仍然简单地了解一下,利用 Reflection 机制为动态调用 method。 [...]

留下您的脚印


«
»