①:在运行时判断任意一个对象所属的类。 ②:在运行时构造任意一个类的对象。 ③:在运行时判断任意一个类所具有的成员变量和方法。 ④: 在运行时调用任意一个对象的方法 反射机制允许程序在运行时通过反射的API获取类中的描述,方法,并且允许我们在运行时改变fields内容或者去调用methods //源代码片段来自云代码http://yuncode.net 在JDK中,主要由以下类来实现Java反射机制,这些类都 位于java.lang.reflect包中 ①:Class类:代表一个类。【注:这个Class类进行继承了Object,比较特别】 ②:Field 类:代表类的成员变量(成员变量也称为类的属性)。 ③:Method类:代表类的方法。 ④:Constructor 类:代表类的构造方法。 ⑤:Array类:提供了动态创建数组,以及访问数组的元素的静态方法 //源代码片段来自云代码http://yuncode.net 要想使用使用反射,我们要去获取我们需要进行去处理的类或者对象的Class对象,其中我们主要有三种方法去获取 ①:使用Class的静态方法forName():例如:Class.forName("java.lang.Class"); ②:使用XXX.Class语法:例如:String.Class; ③:使用具体某个对象.getClass()方法:例如String str="abc"; Class tClass=str.getClass(); 先看一个例子:这个例子对于指定的类名,使用反射来获取该类中的所有声明的方法,(使用第一种获取Class对象的方法)(主要代码如下:): //源代码片段来自云代码http://yuncode.net package com.jiangqq.reflection; /** * 使用反射来获取Class中的生命的方法,包括私有的方法 */ import java.lang.reflect.Method; public class Reflection1 { public static void main(String[] args) throws Exception { //使用Class去调用静态方法forName()获得java.lang.Class的Class对象 Class tClass = Class.forName("java.lang.Class"); //获取该class中声明的所有方法 Method[] methods = tClass.getDeclaredMethods(); for (Method method : methods) { System.out.println(method); } } } //源代码片段来自云代码http://yuncode.net ①: getName():获得类的完整名字。 ②: getFields():获得类的public类型的属性。 ③: getDeclaredFields():获得类的所有属性。 ④: getMethods():获得类的public类型的方法。 ⑤: getDeclaredMethods():获得类的所有方法。 ⑥:getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字parameterTypes参数指定方法的参数类型。 ⑦:getConstructors():获得类的public类型的构造方法。 ⑧:getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes参数指定构造方法的参数类型。 ⑨:newInstance():通过类的不带参数的构造方法创建这个类的一个对象。 先看上面的⑧和⑨其中都能生成对象,但是因为构造函数有无参和有参构造函数两种,所以我们分两种情况考虑 //源代码片段来自云代码http://yuncode.net Class tclass = Reflection2.class; Object reflection2 = classType.newInstance(); //源代码片段来自云代码http://yuncode.net Class classType = Reflection2.class; t reflection2 = classType.newInstance(); Constructor constructor = classType.getConstructor(new Class[] {}); reflection2 = constructor.newInstance(new Object[] {}); //源代码片段来自云代码http://yuncode.net Class tClass = Person.class; Constructor cons = classType.getConstructor(new Class[]{String.class, int.class}); Object obj = cons.newInstance(new Object[]{“zhangsan”, 19}); //源代码片段来自云代码http://yuncode.net