JAVA反射机制
JAVA语言中的反射机制是指在Java运行时环境中,对于任意一个类,能够动态地获取这个类的属性和方法。
Java反射机制主要提供以下功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
4.在运行时调用任意一个对象的方法
Java反射相关的API:
位于java.lang.reflect包中
-Class类:代表一个类
-Fiele类:代表类的成员变量
-Method类:代表类的方法
-Constructor类:代表类的构造方法
-Array类:提供动态创建数组,以及访问数组的元素的静态方法,该类中的所有方法都是静态方法
----Class类
在Java的Object类中的申明了数个应用所有Java类中被被改写的Methods:hashCode()、equls()、clone()、toString()、getClass()等
其中的getClass返回一个Class类型的对象。
Class类十分的特殊,它和一般的类一样继承于Object,其实体用以表达Java程序运行时的Class和Interface,也用来表达enum、array、primtive、Java Type以及关键字void,当加载一个类,或者当加载器(ClassLoader)的defineClass()被JVM调用,便产生了一个Class对象。Class是Reflection起源,针对任何你想探勘的Class,唯有现为它产生一个Class对象,接下来才能经由后者唤起数十个反射API。
Java允许我们从多种途径为一个类Class生成对应的Class对象:
--运用getClass():Class class=object.getClass();
--运用Class.getSuperClass()
--运用Class.forName() :最为常用
--运用类名.class
--运用primitive wrapper classes的TYPE语法:Integer.TYPE
----运行时生成instance
想生成对象的实例,在反射动态机制中有两种方法,一个针对无变量的构造方法,一个针对带参数的构造方法。如果想调用带参数的构造方法,就比较麻烦,不能直接调用Class类中的newInstatance(),而是调用Constructor类中的newInstance()方法。首先准备一个Class[] 作为Constructor的参数类型,然后调用该Class对象的getConstructor()方法获得一个专属的Constructor对象,最后再准备一个Object[]作为Constructor对象的newInstance()方法的实参。
例如:
Class c=Class.forName("Dyn Test");
Class[] ptype=new Class[]{double.class,int.class};
Constructor ctor=c.getConstructor(ptypr);
Object[] obj=new Object[]{new Double(3.1415),new Integer(123)};
Object object=ctor.newInstance(obt);
System.out.println(object);