反射获取构造器对象

1. Constructor getConstructor(Class... parameterTypes)
根据参数匹配获取某个构造器,只能拿public修饰的构造器,几乎不用!
2. Constructor getDeclaredConstructor(Class... parameterTypes)
根据参数匹配获取某个构造器,只要申明就可以定位,不关心权限修饰符,建议使用!
3. Constructor[] getConstructors()
获取所有的构造器,只能拿public修饰的构造器。几乎不用!!太弱了!
4. Constructor[] getDeclaredConstructors()
获取所有申明的构造器,只要你写我就能拿到,无所谓权限。建议使用!!
public class TestStudent01 {
// 1. getConstructors:
// 获取全部的构造器:只能获取public修饰的构造器。
// Constructor[] getConstructors()
@Test
public void getConstructors(){
Class c = Student.class;
// 提取类中的全部的构造器对象(这里只能拿public修饰)
Constructor[] constructors = c.getConstructors();
//遍历构造器
for (Constructor constructor :constructors) {
System.out.println(constructor.getName());
}
}


// 2.getDeclaredConstructors():
// 获取全部的构造器:只要你敢写,这里就能拿到,无所谓权限是否可及。


// 3.getConstructor(Class... parameterTypes)
// 获取某个构造器:只能拿public修饰的某个构造器
@Test
public void getConstructor()throws Exception{
//第一步 : 获取类对象
Class c = Student.class;
// 定位单个构造器对象(按照参数定位无参数构造器)
Constructor cons = c.getConstructor();
//遍历构造器
System.out.println(cons.getName()+"==>"+cons.getParameterCount());

}


// 4.getDeclaredConstructor(Class... parameterTypes)
// 获取某个构造器:只要你敢写,这里就能拿到,无所谓权限是否可及。
@Test
public void getDeclaredConstructor()throws Exception{
Class c = Student.class;

//定位单个构造器(按照参数类型定位无参数构造器)
Constructor cons = c.getDeclaredConstructor();
System.out.println(cons.getName());

//定位有参数构造器
Constructor cons1 = c.getDeclaredConstructor(String.class, int.class);
System.out.println(cons1.getName());
}
}
--------------------
目标: 反射_获取Constructor构造器然后通过这个构造器初始化对象。
public class TestStudent02 {
// 1.调用构造器得到一个类的对象返回。
@Test
public void getDeclaredConstructor()throws Exception{
Class c = Student.class;

//定位单个构造器(按照参数类型定位无参数构造器)
Constructor cons = c.getDeclaredConstructor();
System.out.println(cons.getName());

//如果遇到私有的构造器,可以暴力反射
cons.setAccessible(true);

Student s = (Student) cons.newInstance();
System.out.println(s);
System.out.println("-----------------");
//定位有参数构造器
Constructor cons1 = c.getDeclaredConstructor(String.class, int.class);
System.out.println(cons1.getName());

Student s1 = (Student) cons1.newInstance("孙悟空",1000);
System.out.println(s1);
}

}

posted on 2022-04-05 09:05  我要当程序源  阅读(83)  评论(0编辑  收藏  举报

导航