反射--构造方法
public class ConstructorDemo_01 {
@Test
public void demo01(){
//触发 无参构造方法
Bean bean = new Bean();
}
@Test
public void demo02() throws Exception{
/* 通过 无参构造方法 获得实例对象
* 1.获得Class对象
* 2.通过clazz获得无参构造
* 3.通过构造对象获得实例化对象
*/
//1 获得Class
Class clazz = Class.forName("com.itheima_01_bean.Bean");
//2 获得构造对象 , 相当于:Bean()
// * getConstructor() 获得指定形参列表的构造方法
Constructor cons = clazz.getConstructor();
//3 获得实例 , 相当于:new Bean()
// * newInstance() 创建实例对象,需要设置实际参数
Object obj = cons.newInstance();
}
@Test
public void demo03() throws Exception{
/* 通过 有参构造 获得实例
* Bean bean = new Bean("b001");
*/
// 1 获得Class对象
Class clazz = Class.forName("com.itheima_01_bean.Bean");
// 2 获得构造,必须指定形参
Constructor cons = clazz.getConstructor(String.class);
// 3 获得实例对象,必须设置实际参数
Object obj = cons.newInstance("b002");
System.out.println(obj);
}
@Test
public void demo04() throws Exception{
// 无参构造 快速获得实例方式
//1 获得Class
Class clazz = Class.forName("com.itheima_01_bean.Bean");
//2 通过clazz直接创建对象
Object obj = clazz.newInstance();
}
@Test
public void demo05() throws Exception{
// 通过 私有构造方法 创建实例对象
//1 获得Class对象
Class clazz = Class.forName("com.itheima_01_bean.Bean");
//2 获得 指定形参 私有构造
// * clazz.getConstructor(...) 获得指定对象的指定的public构造方法
// * clazz.getDeclaredConstructor( ... ) 获得指定对象的指定的任意构造方法
Constructor cons = clazz.getDeclaredConstructor(String.class ,String.class);
//3 通知jvm,运行实例化私有构造(默认不允许)
cons.setAccessible(true);
//4 创建实例,并设置实际参数
Object obj = cons.newInstance("b001","名称");
System.out.println(obj);
}
}