package cn.sdut.reflectclass;
import java.lang.reflect.Constructor;
/*
* 反射第三步 : 通过反射获取某一个类的 构造器Constructor 并通过反射创建对象
*
* 带有 “Declared”的方法 无论什么访问权限的构造器都可访问
* 不带有 “Declared”的方法 只可访问public的构造器
*
*/
class A{
public A(){
System.out.println("无参构造器");
}
public A(int a){
System.out.println("int 有参构造器"+a);
}
private A(String b,String a){
System.out.println("私有String 有参构造器"+b+a);
}
}
public class ReflectDemo03 {
public static void main(String[] args) throws Exception, SecurityException {
//1: 获得A的字节码对象
Class clz = A.class;
//2 : 获得所有 构造器getDeclaredConstructors()返回所有权限的构造器 getConstructors()返回public权限的构造器
Constructor[] c = clz.getDeclaredConstructors();
for (Constructor constructor : c) {
System.out.println(constructor);
}
//3: 或得某一个 构造器
Constructor<A> c1 = clz.getDeclaredConstructor(String.class,String.class);//私有
System.out.println(c1);
Constructor<A> c2 = clz.getConstructor();//公共
System.out.println(c2);
//4:通过public构造器 创建对象
A a = c2.newInstance(new Object[]{});//创建对象时调用无参构造器 打印输出:"无参构造器"
// 5: 通过private构造器 创建对象
c1.setAccessible(true);//设置成可以通过私有构造器 创建对象
A b = c1.newInstance(new Object[]{"1111","2222"});//打印输出: 私有String 有参构造器11112222
}
}
反射第三步 : 通过反射获取某一个类的 构造器Constructor 并通过反射创建对象
最新推荐文章于 2022-06-04 10:00:00 发布