background image

java

 

     反射机制与动态代理

 

 

前言,在 Java 运行时刻,能否知道一个类的属性方法并调用改动之?对于任
意一个对象,能否知道他的所属类,并调用他的方法?答案是肯定的。这种动
态的获取信息及动态调用方法的机制在 Java

中称为 反射 (reflection)。

 

Java 反射机制主要提供以下功能:

 

在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法。

Reflection 是 Java 被视为动态(或准动态)语言的一个关键性质。这个机制
允许程序在运行时透过 Reflection APIs 取得任何一个

已知名称的 class

的内

部信息,包括其 modifiers(诸如 public, static 等等)、superclass(例如
Object)、实现之 interfaces(例如 Serializable),也包括 fields 和
methods 的所有信息,并可于运行时改变 fields 内容或调用 methods。

 

一般而言,开发者社群说到动态语言,大致认同的一个定义是: 程序运行时,

允许改变程序结构或变量类型,这种语言称为动态语言 。

 

在 JDK 中,主要由以下类来实现 Java 反射机制,这些类都位于
java.lang.reflect 包中:
Class 类:代表一个类;
Field 类:代表类的成员变量(成员变量也称为类的属性);
Method 类:代表类的方法;
Constructor 类:代表类的构造方法;
Array 类:提供了动态创建数组,以及访问数组的元素的静态方法;

 

例程 DateMethodsTest 类演示了 Reflection API 的基本作用,它读取命令行
参数指定的类名,然后打印这个类所具有的方法信息,代码如下:

Datemethodstest.java

 

代码