[代码记录生活]反射Reflection_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > [代码记录生活]反射Reflection

[代码记录生活]反射Reflection

 2011/10/10 8:06:09  newerdragon  http://newerdragon.iteye.com  我要评论(0)
  • 摘要:用来动态获取类的信息以及动态调用对象的方法的功能,这套机制叫作:反射。反射是如今很多流行框架的实现基础,其中包括:Struts,Spring,Hibernate等。Java的反射机制:在运行时判断任意一个对象所属的类,在运行时判断任意一个类所具有的成员变量和方法,在运行时构造任意一个类的对象,在运行时调用任意一个对象的方法。那么通过反射所获取的信息从什么地方获取呢?对于每个类,在加载时都有一个唯一的Class对象,Class对象中包含了所有需要动态获取的,类的信息。--前面已经提到
  • 标签:代码 反射 生活
用来动态获取类的信息以及动态调用对象的方法的功能,这套机制叫作:反射。

反射是如今很多流行框架的实现基础,其中包括:Struts,Spring,Hibernate 等。

Java 的反射机制:
  在运行时判断任意一个对象所属的类,
  在运行时判断任意一个类所具有的成员变量和方法,
  在运行时构造任意一个类的对象,
  在运行时调用任意一个对象的方法。

那么通过反射所获取的信息从什么地方获取呢?
  对于每个类,在加载时都有一个唯一的Class对象,
  Class对象中包含了所有需要动态获取的,类的信息。

-- 前面已经提到,如何获取Class对象的三种方式

主要由java.lang.reflect包下的类实现反射机制:
  Class类: 代表一个类
  Field类: 代表类的成员变量(也称为属性)
  Method类: 代表类的方法
  Modifier类: 代表修饰符
  Constructor类:  代表类的构造方法
  Array类:  提供了动态创建数组,以及访问数组的元素的静态方法

在Class对象方法中,
所有getXXXX方法只能反射出公有(public)类型的成员,包括父类的成员。
所有getDeclaredXXX方法可以反射出类的所有成员,包括私有成员,但只限于类本身成员。


Class中常用的方法:
getConstructors()  :获得类的所有的public类型的构造方法。
getDeclaredConstructors()  :获得类所有的构造方法。
getFields() : 获得类的public类型属性。
getMethod() : 获取类的public类型方法。

它们有各种重载方法,大家参考API。

调用方法的步骤:
  1.设定调用方法的参数列表(Class[])
  2.获得调用方法的对象(Method)
  3.设置调用方法的参数的值(Object[])
  4.普通方法: invoke(obj,values)
  5.构造方法: newInstance(values)

调用属性的步骤:
  1.根据属性名字获取属性对象(Field)
  2.赋值: set(obj,value)
  3.取值: get(obj)

如果需要强行访问类的私有成员,则需要设置:
setAccessible(true)

反射就是照镜子,照出类的内部结构。


发表评论
用户名: 匿名