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

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
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值