参考自 http://www.cnblogs.com/gulvzhe/archive/2012/01/27/2330001.html html
Java反射机制是在运行状态中,对于任意一个类,都可以知道这个类的全部属性和方法;对于任意一个对象,都可以调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。反射的概念是由Smith在1982年首次提出的,主要是指程序能够访问、检测和修改它自己状态或行为的一种能力。这一律念的提出很快引起了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。固然反射自己并非一个新概念,它可能会使咱们联想到光学中的反射概念,尽管计算机科学赋予了反射概念新的含义,可是,从现象上来讲,它们确实有某些相通之处,这些有助于咱们的理解。java
Java反射机制主要提供下面几种用途:ide
在运行时判断任意一个对象所属的类spa
在运行时构造任意一个类的对象设计
在运行时判断任意一个类所具备的成员变量和方法orm
在运行时调用任意一个对象的方法htm
使用java的反射机制,通常须要遵循三步:对象
1. 得到你想操做类的Class对象blog
Class<?> cls = Class.forName(“java.lang.String”);// 得到Class接口
2. 经过第一步得到的Class对象去取得操做类的方法或是属性名
Method[] methods = cls.getMethods();// 经过Class得到所对应对象的方法
Method method = cls.getMethod("show", String.class);// 经过Class得到DisPlay类的show方法
Field[] fromFields = cls.getDeclaredFields();// 取得拷贝源对象的属性列表
3. 操做第二步取得的方法或是属性
method.invoke(disPlay, "Wanggc");// 调用show方法
String name = fromField.getName();// 取得拷贝源对象的属性名字
fromField.get(from)// 获取拷贝源对象的属性的值
Field destField = destClass.getDeclaredField(name);// 取得拷贝目标对象的相同名称的属性
destField.set(obj, fromField.get(from));// 将拷贝源对象的属性的值赋给拷贝目标对象相应的属性
fromField.setAccessible(true);// 设置属性的可访问性
destField.setAccessible(true);
Java运行的时候,某个类不管生成多少个对象,他们都会对应同一个Class对象,它表示正在运行程序中的类和接口。如何取得操做类的Class对象,经常使用的有三种方式:
1. 调用Class的静态方法forName,如上例;
2. 使用类的.class语法,如:Class<?> cls = String.class;
3. 调用对象的getClass方法,如:String str = "abc";Class<?> cls = str .getClass();