99网
您的当前位置:首页反射机制

反射机制

来源:99网
1. 什么是反射机制

JAVA反射机制是在运行状态中,a. 对于任意一个类,都能够知道这个类的所有属性和方法;b. 对于任意一个对象,都能够调用它的任意一个方法;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2. 反射机制如何实现

反射机制最重要的特性之一是动态,动态指的是非编译时处理,抑或运行时处理。

这种机制,可以让程序的弹性增加不少,因为借由此机制,客户可以在程序运行时改变一些他关心的性质:分配内存,调用某个类等。

(1) java.lang.Class类

Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。

ClassLoader找到了需要调用的类时(java为了内存的调用消耗,类的加载都在需要时再进行),就会加载它,然后根据.class文件内记载的类信息来产生一个与该类相联系的独一无二的Class对象。该Class对象记载了该类的字段,方法等等信息。以后jvm要产生该类的实例,就是根据内存中存在的该Class类所记载的信息(Class对象应该和我所了解的其他类一样会在堆内存内产生、消亡)来进行。

(2)获取Class对象有三种方式

1.通过Object类的getClass()方法。例如: Class c1 = new String(\"\").getClass();

2.通过Class类的静态方法——forName()来实现: Class c2 = Class.forName(\"MyObject\");

如在sql中动态加载驱动程序:class.forName(sqlDriver);

3.如果T是一个已定义的类型的话,在java中,它的.class文件名:T.class就代表了与其匹配的Class对象,例如: Class c3 = Manager.class; Class c4 = int.class;

Class c5 = Double[].class;

(3) Class类中存在以下几个重要的方法: 1.getName()

一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述 2.newInstance()

该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类的默认构造方法。例如: MyObject x = new MyObject();

MyObject y = x.getClass().newInstance(); 3.getClassLoader()

返回该Class对象对应的类的类加载器。 4.getComponentType()

该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对象。例如:

int[] ints = new int[]{1,2,3}; Class class1 = ints.getClass();

Class class2 = class1.getComponentType();

而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象。 5.getSuperClass()

返回某子类所对应的直接父类所对应的Class对象。 6.isArray()

判定此Class对象所对应的是否是一个数组对象。

如struts中。请求的派发控制。当请求来到时。struts通过查询配置文件。找到该请求对应的action。已经方法。然后通过反射实例化action。并调用响应method。

反射用于动态创建。比如说Servlet的创建和调用,就是用到了反射。

因篇幅问题不能全部显示,请点此查看更多更全内容