黑马程序员技术交流社区

标题: 反射获取构造函数并创建对象 [打印本页]

作者: fmi110    时间: 2015-9-20 10:54
标题: 反射获取构造函数并创建对象
a
  1. package demo.reflect;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.InvocationTargetException;

  4. //通过反射获取类对象的构造方法,并使用
  5. public class ReflectDemo2 {
  6.         public static void main(String[] args) throws Exception {
  7.                 // 通过静态方法获取类的字节码文件对象
  8.                 Class p = Class.forName("demo.reflect.People");
  9.                 // 获取构造函数
  10.                 // 1 获取所有的 公共的构造函数 public Constructor[] getConstructors();
  11.                 // 2 获取类声明的所有构造函数 public Constructor[] getDeclareCinstructors();
  12.                 Constructor[] cons1 = p.getConstructors();
  13.                 Constructor[] cons2 = p.getDeclaredConstructors();

  14.                 printCons(cons1);
  15.                 printCons(cons2);

  16.                 // 获取单个构造函数
  17.                 // public Constructor<T> getConstructor(Class<?>... parameterTypes)
  18.                 // 参数代表:所要的构造函数所需要的 参数,它们的形式是数据类型的字节码文件
  19.                 Constructor con = p.getConstructor(java.lang.String.class, int.class,
  20.                                 java.lang.String.class);
  21.                 Constructor con5 = p.getConstructor();
  22. //                System.out.println(con);

  23.                 // 反射获取的构造器新建一个实例
  24.                 Object obj = con.newInstance("Lily",18,"南京");
  25.                 Object obj1 = con5.newInstance();
  26.                 System.out.println(obj instanceof People);
  27.                
  28.                 //通过反射获取私有的构造函数,并构建对象(构造对象时,需要取消java语言的访问检查)
  29.                 Constructor con8 = p.getDeclaredConstructor(String.class,Integer.class);
  30.                 con8.setAccessible(true);//设置通过反射得到的对象在使用时取消java语言的访问检查
  31.                 Object obj2 = con8.newInstance("hah",19);
  32.                 People obj3 = (People)con8.newInstance("hah",19);
  33.         }

  34.         private static void printCons(Constructor[] cons1) {
  35.                 for (Constructor c : cons1)
  36.                         System.out.println(c);
  37.                 System.out.println("------------------------------------------");
  38.         }
  39. }
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2