反射:获取类中的构造器

1.通过反射来获取某一个类的构造器

1):获取该类的字节码对象.
2):从该字节码对象中去找需要获取的构造器.
------------------------------------------------------------------------
Class类获取构造器方法:
Constructor类:表示类中构造器的类型,Constructor的实例就是某一个类中的某一个构造器

public Constructor<?>[] getConstructors():该方法只能获取当前Class所表示类的public修饰的构造器
public Constructor<?>[] getDeclaredConstructors():获取当前Class所表示类的所有的构造器,和访问权限无关

public Constructor<T> getConstructor(Class<?>... parameterTypes) :获取当前Class所表示类中指定的一个public的构造器
      参数:parameterTypes表示:构造器参数的Class类型
      如:public User(String name)
        Constructor c =  clz.getConstructor(String.class);

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) :获取当前Class所表示类中指定的一个的构造器


定义一个User类:

public class User {

	public User(){
		
	}
	
	public User(String name){
		
	}
	
	//私有的构造器
	private User(int age,String name){
		
	}
}
测试:

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import org.junit.Test;

/**
 * 
 * 说明:获取类中的构造器
 *
 */
public class ConstrustorTypeDemo {
	//获取String类的公共构造器
	@Test
	public void testGetContructors() throws Exception {
		Class<?> clazz = Class.forName("java.lang.String");
		
		Constructor<?>[] constructors = clazz.getConstructors();
		for (Constructor<?> constructor : constructors) {
			System.out.println(constructor);//获取String类的公共构造方法
		}
	}
	//获取User类的公共的构造器
	@Test
	public void testUserContructors() throws Exception {
		Class<?> clazzClass = Class.forName("_02constructor.User");
		Constructor<?>[] constructors = clazzClass.getConstructors();
		for (Constructor<?> constructor : constructors) {
			System.out.println(constructor);
			//打印结果:只能获取公共的构造方法
			//public _02constructor.User()
			//public _02constructor.User(java.lang.String)
		}
	}
	
	//获取User类的所有构造器,包括私有
	@Test
	public void testDeclaredContructors() throws Exception {
		Class<?> clazzClass = Class.forName("_02constructor.User");
		Constructor<?>[] declaredConstructors = clazzClass.getDeclaredConstructors();
		for (Constructor<?> constructor : declaredConstructors) {
			System.out.println(constructor);
			//打印结果:能获取包括私有的构造方法
			//public _02constructor.User()
			//public _02constructor.User(java.lang.String)
			//private _02constructor.User(int,java.lang.String)
		}
	}
	//获取User类带有参数的指定的公共的构造器
	@Test
	public void testGetContructor() throws Exception {
		Class<?> clazzClass = Class.forName("_02constructor.User");
		Constructor<?> constructor = clazzClass.getConstructor(String.class);
		System.out.println(constructor);//public _02constructor.User(java.lang.String)
		
	}	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值