Java-获取类中的构造器

需求:通过反射来获取某一个类的构造器:

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所表示类中指定的一个的构造

//获取指定的一个构造器的
private static void getOne() throws Exception {
	//1.获取构造器所在类的字节码对象
	Class<User> clz = User.class;
	//2. 获取clz对象中所有的构造器
	//需求1 .获取public User()
	Constructor con = clz.getConstructor();
	System.out.println(con);
	//2.获取public User (String name)
	con = clz.getConstructor(String.class);
	System.out.println(con);
	//需求3. 获取private User(String name ,int age)
	con =clz.getDeclaredConstructor(String.class,int.class);
	System.out.println(con);
	
	
}
private static void getAll() {
	// 1:获取构造器所在类的字节码对象
	Class<User> clz = User.class;
	// 2 : 获取clz对象中的所有构造器
	// public Constructor<?>[]getConstructors(),
	//该方法只能获取当前Class所表示的类       public     修饰的构造器
	Constructor<?>[] cs = clz.getConstructors(); // 方法后面加S的表示获取所有的,不加S表示获取单个
	System.out.println(cs.length);
	for (Constructor<?> c : cs) {
		System.out.println(c);
	}
	System.out.println("================");
	// public Constructor<?>[] getDeclaredConstructors(),
	// 该方法只能获取当前Class所表示的类的所有构造器.和访问权限无关
	cs = clz.getDeclaredConstructors();
	System.out.println(cs.length);
	for (Constructor<?> c : cs) {
		System.out.println(c);
	}
	System.out.println("================");

}
class User {
	public User() {
	}

	public User(String name) {
	}

	private User(String name, int age) {
	}

}

 

版权声明:
作者:yfeer
链接:https://www.yfeer.com/859.html
来源:个人编程学习网
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>