今天学的java中的反射~~
下面先把 要用到的 Student类 粘出来吧。
package cn.csdn.fan;
public class Student {
public String name;
public String[] str;
public Student(){ //如果不加public默认为保护
System.out.println("不带参数的");
}
public Student(String name){
this.name=name;
System.out.println("带参数的");
}
public Student(String args[]){
this.str=args;
System.out.println("数组");
}
public String getName(){
return name;
}
public String[] getStr{
return str;
}
………………
}
觉得反射就是一个步骤而已,通过这个步骤换一种方式 获得类的实例对象
。
既然我觉得ta只是个步骤而已那么就介绍一下这个步骤吧
建立一个反射的步骤:
第一步 获得Class对象
有3种方法可以获得
1、Class cla=Student.getClass();
2、Class cla=Class.forName("cn.csdn.fan");
3、Class cla=Student.class;
第二步 获得Class对象之后 就是通过这个对象获得类该的构造方法
Constructor con=cla.getConstructor();
//获得不带参数的构造方法
如果要是获得带参数的构造方法可以这样做
Constructor con=cla.getConstructor(String.class);
//获得带参数为Sting类型的构造方法
要获得参数为数组的构造方法:
Constructor con=cla.getConstructor(String[].class);
//获得带参数为Sting数组类型的构造方法
要获得其所有的构造方法
Constructor[] con=cla.getDeclaredConstructors();
第三步 用刚才获得构造方法 con 去创建实体对象
对于不带参数的要获得实例:
Student stu=(Student)con.newInstance();
对于带参数的要获得实例:
Student stu=(Student)con.newInstance(new String());
对于带数组的要获得实例:
String str[]={"a","b"};
Student stu=(Student)con.newInstance((Object)str);
//对于数组这种情况,编译环境:jdk1.6
在完成这三步之后就可以用 获得的Student 实例 stu 去调用Student类
中的方法了。
觉得反射还挺有意思,暂时 就当是 换了一种方法建立类的实例(感觉这种
方法还挺好玩的。。),相信在以后的应用中对反射会有一个更高的认识。
。