1.首先我们要知道我们为什么要学习反射,注解,因为java的反射机制可以帮助程序员更深入的控制程序的运行过程------那么我们接下来就来了解一下反射与注解。
2.通过反射机制可以在程序中访问已经加载到JVM中的java对象的描述,实现访问,检测和修改java对象本身的信息功能,总所周知java中的所有类都继承object类,在object类中定义一个getclass()方法该方法返回一个类型为class的对象,例如下面的代码能更加直观地让我们理解这一段话
JTextField textField=new JTextField();
Class textFieldC=textField.getClass();
2.访问对象
在通过下列一组方法访问构造对象时将返回Constructor类型的对象或者数组,每个Constructor对象将代表一个构造方法,
getConstructors();
getConstructor(Class<?>......paramterTypes);
getDeclaredConstructors();
getDeclaredConstructor(Class<?>paramterTypes);
如果访问的是指定的方法,需要根据该构造方法的入口参数的类型来访问,例如访问一个入口参数类型依次为String型和int型的构造方法通过一下的方式也可以
objectClass.getDeclaredConstructor(String.class,int class);
objectClass.getDeclaredConstructor(new Class[]{String.class,int.class})
package rjxy.com;
public class Demo {
String s;
int i,i2,i3;
protected Demo(String s,int i){
this.s=s;
this.i=i;
}
public Demo(String...Strings)throws NumberFormatException{
if(0<Strings.length)
i=Integer.valueOf(Strings[0]);
if(1<Strings.length)
i2=Integer.valueOf(Strings[1]);
if(2<Strings.length)
i3=Integer.valueOf(Strings[2]);
}
public void print(){
System.out.println("s="+s);
System.out.println("i="+i);
System.out.println("i2="+i2);
System.out.println("i3="+i3);
}
}
下面编写测试类
package rjxy.com;
import java.lang.reflect.Constructor;
import rjxy.com.Demo;
public class ConstructorDemo {
public static void main(String[] args){
Demo d=new Demo("10","20","30");
Class<? extends Demo>DemoClass=d.getClass();
//获得所有的构造方法
Constructor[] declaredConstructors=DemoClass.getDeclaredConstructors();
for (int i=0;i<declaredConstructors.length;i++){
//循环遍历
Constructor<?>constructor=declaredConstructors[i];
System.out.println("查看是否允许带有可变数量的参数:"+ constructor.isVarArgs());
System.out.println("该构造方法的入口参数类型依次为:");
Class[]paramterTypes=constructor.getParameterTypes();
for(int j=0;j<paramterTypes.length;j++){
System.out.println(""+paramterTypes[j]);
}
System.out.println("该构造方法抛出的异常类型为");
Class[]exceptionTypes=constructor.getExceptionTypes();
for(int j=0;j<exceptionTypes.length;j++){
System.out.println(""+exceptionTypes[j]);
}
Demo d2=null;
while (d2==null) {
try {
if (i == 2)
d2 = (Demo) Constructor.newInstance();
else if (i == 1)
d2 = (Demo) constructor.newInstance("7", 5);
else {
Object[] paramters = new Object[]{
new String[]{
"100", "200", "300"
}
};
d2 = (Demo) constructor.newInstance(paramters);
}
} catch (Exception e){
System.out.println("创建对象时抛出异常");
constructor.setAccessible(true);
}
}
if(d2!=null){
d2.print();
System.out.println();
}
}
}
}