Java反射机制(5)

来源:互联网 发布:oracle mysql 优缺点 编辑:程序博客网 时间:2024/05/29 09:57

概念:

     反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。

     Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

功能:

1)在运行时判断任意一个对象所属的类;

2)在运行时构造任意一个类的对象;

3)在运行时判断任意一个类所具有的成员变量和方法;

4)在运行时调用任意一个对象的方法;

5)生成动态代理。

常用类:

     要使用Java反射机制,就得使用java.lang.Class这个类,它是Java反射机制的起源。当一个类被加载后,Java虚拟机就会自动产生一个Class对象,通过该对象就能获得该对象的方法、成员及构造等信息。

获得Class实例的四种方式:

第一种:使用Class类的静态方法forName(),用类的全名获得一个Class实例。

例如:Class.forName(“java.util.Hashtable”);

第二中:利用对象调用getClass()方法获得对象的Class实例。

例如:String s=“”;Classc=s.getClass();

第三种:对于基本数据类型的封装类,可以采用Type属性获得对应数据类型的Class实例。例如:Class c=Integer.Type;

第四种:通过的类的class属性获得该类的Class实例。

例如:Classc=java.util.Hashtable.class;

Class类支持反射的主要方法:

1)getConstrucotrs():获得类的构造方法。

2)getMethods():获得类的成员方法。

3)getFields():获得类的成员变量。

Class类的实例:


API:

在Java中,主要由以下类实现反射,这些类都位于java.lang.reflect包中。

1)Field:代表类的成员变量。

2)Method:代表类的方法。

3)Constructor:代表类的构造方法。

Field类的实例:


Method类的实例:


Constructor类的实例: