要想了解JAVA反射,我们就得知道有这样一个类叫Class。
任何一个类在编译成xx.class后都会产生一个Class对象。
JAVA反射的本质其实就是在不知道类名的情况下,动态的生成类对象。
无论此类有几个构造方法,无论此类有几个方法,我们都可以利用Class类啊、Construct类啊来动态生成类。
一般生成Class类对象有以下3种方法:
1)用Class.forName(""),Class c=Class.forName("")
2)类名.class,即Class c=Point.class
3)对象.getClass(),即Class c=Point.getClass
但是对于基本类型而言,可以用.TYPE
4)int.TYPE
生成的Class对象呢,即c,它不是独立存在的,它和原来的类有着非常紧密的联系。
而且如果我们的目的仅仅是c的话,那么一切也就没有意义了。
我们用c的目的就是用它来生成对象。
生成对象的方法如下:
1)c.newInstantce();此方法适用构造方法是无参的。
2)Constructor cons=c.getConstructor(Pointer.class);
cons.newInstance(new Pointer());
或者如果不知道有几个构造方法,以及每个构造方法有几个参数的话,可以用如下语句:
Constructor cons[]=c.getDeclaredConstructor();
这里以第一个cons为例进行说明,假设它有2个参数,全是int型的
那么Class paramTypes[]=cons[0].getParamTypes();
Object paramValues[]=new Object[paramTypes.length];
for(int i=0;i<paramTypes.length;i++){
if(paramTypes[i].isPrimitive){
paramValues[i]=paramTypes[i];
}
}
//创建对象
Pointer p=cons[0].newInstance(paramValues);
具体可以参阅孙鑫JAVA无难事教程