反射第三步 : 通过反射获取某一个类的 构造器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 c1 = clz.getDeclaredConstructor(String.class,String.class);//私有
		System.out.println(c1);
		Constructor 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
		
	}
}

你可能感兴趣的:(java_反射,java,反射机制,获取构造器,创建对象)