a- package demo.reflect;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.InvocationTargetException;
- //通过反射获取类对象的构造方法,并使用
- public class ReflectDemo2 {
- public static void main(String[] args) throws Exception {
- // 通过静态方法获取类的字节码文件对象
- Class p = Class.forName("demo.reflect.People");
- // 获取构造函数
- // 1 获取所有的 公共的构造函数 public Constructor[] getConstructors();
- // 2 获取类声明的所有构造函数 public Constructor[] getDeclareCinstructors();
- Constructor[] cons1 = p.getConstructors();
- Constructor[] cons2 = p.getDeclaredConstructors();
- printCons(cons1);
- printCons(cons2);
- // 获取单个构造函数
- // public Constructor<T> getConstructor(Class<?>... parameterTypes)
- // 参数代表:所要的构造函数所需要的 参数,它们的形式是数据类型的字节码文件
- Constructor con = p.getConstructor(java.lang.String.class, int.class,
- java.lang.String.class);
- Constructor con5 = p.getConstructor();
- // System.out.println(con);
- // 反射获取的构造器新建一个实例
- Object obj = con.newInstance("Lily",18,"南京");
- Object obj1 = con5.newInstance();
- System.out.println(obj instanceof People);
-
- //通过反射获取私有的构造函数,并构建对象(构造对象时,需要取消java语言的访问检查)
- Constructor con8 = p.getDeclaredConstructor(String.class,Integer.class);
- con8.setAccessible(true);//设置通过反射得到的对象在使用时取消java语言的访问检查
- Object obj2 = con8.newInstance("hah",19);
- People obj3 = (People)con8.newInstance("hah",19);
- }
- private static void printCons(Constructor[] cons1) {
- for (Constructor c : cons1)
- System.out.println(c);
- System.out.println("------------------------------------------");
- }
- }
复制代码
|
|