反射--构造方法

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);


}













}

posted @ 2019-02-28 21:50  Covef  阅读(192)  评论(0编辑  收藏  举报