java 反射 创造对象 构造方法
一、获取
1、语法
// 获取多个构造方法 class对象.getConstructors() // 获取所有 public 构造方法 clss对象.getDeclaredConstructors() //获取所有 构造方法,包括private // 获取指定构造方法 class对象.getConstructor(...参数类型.class) // public构造, 参数是参数类型的class对象,参数数量>=0 class对象.getDeclaredConstructor(...参数类型.class) // private构造, 参数是参数类型的class对象,参数数量>=0
2、案例
@Test public void getCon() throws NoSuchMethodException { // 获取对象 Class<Person> personClass = Person.class; //所有构造方法包括私有 Constructor<?>[] constructors = personClass.getDeclaredConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor); } // public构造方法 Constructor<Person> constructor = personClass.getConstructor(String.class, Integer.class); System.out.println("constructor = " + constructor); // private构造方法 Constructor<Person> constructor1 = personClass.getDeclaredConstructor(String.class); System.out.println("constructor1 = " + constructor1); }
二、创建对象(指定构造方法)
1、语法
构造方法对象.newInstance(...构造方法实参);
注意:私有的构造方法要
构造方法对象.setAccessible(true);
2、案例
@Test public void constructorUse() throws Exception { Class<Person> personClass = Person.class; // public 构造方法 Constructor<Person> constructor = personClass.getConstructor(String.class, Integer.class); Person instance = constructor.newInstance("渴念", 10); System.out.println(instance); // private 构造方法 Constructor<Person> constructor1 = personClass.getDeclaredConstructor(String.class); constructor1.setAccessible(true); Person instance1 = constructor1.newInstance("风间彻"); System.out.println(instance1); }