黑马程序员技术交流社区
标题:
反射获取构造函数并创建对象
[打印本页]
作者:
fmi110
时间:
2015-9-20 10:54
标题:
反射获取构造函数并创建对象
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("------------------------------------------");
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2