java反射机制系列二 ----获取类的构造方法并且调用

1.首先定义一个学生类

/**
 * @创建者 yindj
 * @创建时间 2018/4/21 22:38
 * @技术交流 (QQ:429310921)
 * @部门 天元陆兵研发部
 * @描述 定义一个学生类实现各种构造方法
 */
public class Student {
    //---------------构造方法-------
    /*默认的构造方法*/
    Student(String str){
        sop("默认的构造方法 s ="+str);
    }
    /*无惨的构造方法*/
    public Student(){
        sop("共有的、无参的构造方法---执行了--");
    }
    /*有一个参数的构造方法*/
    public Student(char name){
        sop("姓名:" + name);
    }
    /*有2个参数的构造方法*/
    public Student(String name ,int age){
        System.out.println("姓名:"+name+"年龄:"+ age);
    }

    /*受保护的构造方法*/
    protected Student(boolean n){
        System.out.println("受保护的构造方法 n = " + n);
    }

    /*私有的构造方法*/
    private Student(int age){
        System.out.println("私有的构造方法   年龄:"+ age);
    }
    private void sop(Object obj){
        System.out.println(obj);
    }
}

2.测试类

/**
 * @创建者 yindj
 * @创建时间 2018/4/21 22:38
 * @技术交流 (QQ:429310921)
 * @部门 天元陆兵研发部
 * @描述 定义一个学生类实现各种构造方法
 */
public class Constructors {
    public static void main(String[] args)throws Exception{
        /*加载Class对象*/
        Class cls = Class.forName("com.bmw.Student");
        sop("---获取所有的公有的构造方法---");
        Constructor[] conArry = cls.getConstructors();
        for (Constructor c:conArry
             ) {
            sop(c);
        }
        sop("---获取所有的构造方法(包括:公有、私有、默认、构造)---");
        conArry = cls.getDeclaredConstructors();
        for (Constructor c:conArry
             ) {
            sop(c);
        }
        sop("---获取公有的无参的构造方法---");
        Constructor con = cls.getConstructor(null);
        sop("con = "+con);
        /*调用构造方法*/
        Object obj = con.newInstance();
        //sop(obj);
        sop("---获取私有的构造方法---");
        con = cls.getDeclaredConstructor(char.class);
        sop(con);
        con.setAccessible(true);
        obj = con.newInstance('男');
    }
    private static void sop(Object obj){
        System.out.println(obj);
    }
}

3.打印结果如下

---获取所有的公有的构造方法---
public com.bmw.Student(java.lang.String,int)
public com.bmw.Student()
public com.bmw.Student(char)
---获取所有的构造方法(包括:公有、私有、默认、构造)---
private com.bmw.Student(int)
protected com.bmw.Student(boolean)
public com.bmw.Student(java.lang.String,int)
com.bmw.Student(java.lang.String)
public com.bmw.Student()
public com.bmw.Student(char)
---获取公有的无参的构造方法---
con = public com.bmw.Student()
共有的、无参的构造方法---执行了--
---获取私有的构造方法---
public com.bmw.Student(char)

姓名:男

4.总结

1.获取构造方法: 
      1).批量的方法: 
          public Constructor[] getConstructors():所有"公有的"构造方法 
          public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有) 
    
      2).获取单个的方法,并调用: 
          public Constructor getConstructor(Class... parameterTypes):获取单个的"公有的"构造方法: 
          public Constructor getDeclaredConstructor(Class... parameterTypes):获取"某个构造方法"可以是私有的,或受保护、默认、公有; 
       
          调用构造方法: 
          Constructor-->newInstance(Object... initargs) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值