您的位置:首页 > 其它

反射第三步 : 通过反射获取某一个类的 构造器Constructor 并通过反射创建对象

2017-08-21 11:42 375 查看
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

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐