Java反射reflect学习笔记_2:反射类的构造函数

//===================================================
// 反射类的构造函数
//===================================================

<!--
| 首先,通过Class获取类的字节码
| Class clazz = Class.forName("com.marer.reflect.Person");
|
| 然后,利用Constructor创建对象
| Constructor c = clazz.getConstructor(null);//获取无参的构造函数
| Constructor c = clazz.getConstructor(String.class);//获取参数为String的构造函数
| Constructor c = clazz.getConstructor(String.class, int.class);//获取参数为String,int的构造函数
| Constructor c = clazz.getDeclaredConstructor(List.class);//获取隐藏为private的构造函数
| c.setAccessible(true);//暴力反射
|
| 创建对象的另外一种途径,反射出类的无参构造函数并创建对象
| Class clazz = Class.forName("com.marer.reflect.Person");
| Person p = (Person) clazz.newInstance();
| 但是当无参的构造函数为private或不存在的时候,反射抛异常
|转载请注明出处:http://blog.csdn.net/nthack5730/article/details/49822819
| 但是可以通过暴力反射获取类的隐藏构造函数:
| Constructor.setAccessible(true);

-->

 

//解剖类的构造函数,创建类的对象
public class Demo2 {
    
    //反射构造函数:public Person()
    @Test
    public void test1() throws Exception{
        
        Class clazz = Class.forName("com.marer.reflect.Person");
        Constructor c = clazz.getConstructor(null);
        
        Person person = (Person)c.newInstance(null);
        
        System.out.println(person.str);
    }
    
    
    
    //反射构造函数:public Person(String name)
    @Test
    public void test2() throws Exception{
        
        Class clazz = Class.forName("com.marer.reflect.Person");
        Constructor c = clazz.getConstructor(String.class);
        
        Person person = (Person)c.newInstance("测试成功");
        
        System.out.println(person.str);
    }
    
    
    
    //反射构造函数:public Person(String name, int age)
    @Test
    public void test3() throws Exception{
        
        Class clazz = Class.forName("com.marer.reflect.Person");
        Constructor c = clazz.getConstructor(String.class, int.class);
        
        Person person = (Person)c.newInstance("测试成功",123);
        
        System.out.println(person.str);
    }
    
    
    
    //反射四有的构造函数:private Person(List list)
    @Test
    public void test4() throws Exception{
        Class clazz = Class.forName("com.marer.reflect.Person");
        Constructor c = clazz.getDeclaredConstructor(List.class);
        
        c.setAccessible(true);//暴力反射
        
        Person p = (Person) c.newInstance(new ArrayList());
        
        System.out.println(p.str);
    }
    
    
    
    //创建对象的另外一种途径,反射出类的无参构造函数并创建对象
    //但是当无参的构造函数为private或不存在的时候,反射抛异常
    @Test
    public void test5() throws Exception{
        Class clazz = Class.forName("com.marer.reflect.Person");
        Person p = (Person) clazz.newInstance();
        System.out.println(p);
        System.out.println(p.str);
    }
}

 

posted @ 2018-08-11 22:14  moon0521  阅读(103)  评论(0)    收藏  举报