Java反射介绍之二 ------解剖构造器
一个类有多个组成部分,例如:成员变量,方法,构造方法等。反射就是加载类,并解剖出类的各个组成部分。下面就详细介绍构造器器解剖的方法。 案例如下:首先创建一个普通的Java类Student类,该类位于cn.csdn.reflect包中并编译产生相应的class文件.下面就是该类中各种构造器解剖的方式如下:
//第一:怎么知道 Student类中有哪些构造器呢?方法如下:@Testpublic void test3()throws Exception{//1、加载类 ("cn.csdn.reflect.Student"为包名和类名)Class cls = Class.forName("cn.csdn.reflect.Student");//2、获取加载类中的所有的构造器Constructor csr[] = cls.getConstructors();//3、遍历构造器csrfor(Constructor c:csr){//打印出构造器参数的类型及构造器名称 System.out.println(c.toGenericString());}// 解析:public Student()构造器@Testpublic void test1() throws Exception{// 1、加载类 ("cn.csdn.reflect.Student"为包名和类名)Class cls = Class.forName("cn.csdn.reflect.Student");// 2、通过无参数的构造器解析Constructor constructor = cls.getConstructor(null);// 3、创建类的实例Student entity = (Student) constructor.newInstance(null); //4、调用对象的方法entity.study();}//解析:public Student(String name,int age);构造器@Testpublic void test2()throws Exception{//1、加载类 ("cn.csdn.reflect.Student"为包名和类名)Class cls = Class.forName("cn.csdn.reflect.Student");//2、通过带有参数的构造器解析Constructor constructor = cls.getConstructor(String.class,int.class);//3、创建类实例Student entity = (Student)constructor.newInstance("redarmy",90);//4、调用方法entity.study();System.out.println(entity.getName());} //解析:public cn.csdn.reflect.Student(java.lang.String[])构造器@Testpublic void test4()throws Exception{//1、加载类Class cls = Class.forName("cn.csdn.reflect.Student");//2、根据构造器参数类型获取相应的构造器对象 Constructor csr = cls.getConstructor(String[].class);String str[]={"111","123"};//3、创建实体对象Student entity = (Student)csr.newInstance((Object)str);/*如果以上不明白请参考:Java反射中java.lang.IllegalArgumentException: wrong number of arguments的解析*/[url]http://redarmychen.iteye.com/blog/924134[/url]//4、调用方法entity.study();}//解析 private Student(List list)构造器@Testpublic void test5()throws Exception{//1、加载类Class cls = Class.forName("cn.csdn.reflect.Student");//2、根据构造器参数类型获取相应的构造器对象 Constructor csr = cls.getDeclaredConstructor(List.class); //采用此法获取private修饰的构造器csr.setAccessible(true);//强制解析private修饰的构造器//3、创建实体对象Student entity = (Student)csr.newInstance(new ArrayList());//4、调用方法entity.study();}
以上内容归redarmy_chen原创,版权归redarmy_chen所有不得随意转载 如有问题请发送邮件到redarmy.chen@gmail.com