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);

原文地址:https://www.cnblogs.com/yuchao/p/1963670.html