通过反射机制获取class中的构造方法

Vip业务类:

package com.javaSe.bean;


public class Vip {
    int no;
    String name;
    String birth;
    boolean sex;
    
    public Vip() {
    }
    
    public Vip(int no, String name) {
        this.no = no;
        this.name = name;
    }
    
    public Vip(int no, String name, String birth) {
        this.no = no;
        this.name = name;
        this.birth = birth;
    }
    
    public Vip(int no, String name, String birth, boolean sex) {
        this.no = no;
        this.name = name;
        this.birth = birth;
        this.sex = sex;
    }
    
    @Override
    public String toString() {
        return "Vip{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", birth='" + birth + '\'' +
                ", sex=" + sex +
                '}';
    }
}

 

 

 

反编译一个类的Constructor构造方法:

package com.javaSe.reflect;


import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;


/*
反编译一个类的Constructor构造方法。
*/
public class ReflectTest11{
    public static void main(String[] args) throws Exception{
        StringBuilder s = new StringBuilder();
        Class vipClass = Class.forName("com.javaSe.bean.Vip");
        s.append(Modifier.toString(vipClass.getModifiers()) + " class "+ vipClass.getSimpleName() +" {\n");
        
        // 拼接构造方法
        Constructor[] constructors = vipClass.getDeclaredConstructors();
        for (Constructor constructor : constructors){
            s.append("\t");
            s.append(Modifier.toString(constructor.getModifiers()));
            s.append(" ");
            s.append(vipClass.getSimpleName());
            s.append("(");
            // 拼接参数
            Class[] paramaters = constructor.getParameterTypes();
            for (Class paramate : paramaters){
                s.append(paramate.getSimpleName());
                s.append(",");
            }
            // 删除最后下标位置上的字符
            if (paramaters.length > 0){
                s.deleteCharAt(s.length() - 1);
            }
            
            s.append("){}\n");
        }
        
        s.append("}");
    
        System.out.println(s);
    }
}

 

 

通过反射机制调用构造方法实例化java对象案例:

package com.javaSe.reflect;


import com.javaSe.bean.Vip;


import java.lang.reflect.Constructor;


/*
比上一个例子(ReflectTest11)重要一些!!!


通过反射机制调用构造方法实例化java对象。(这个不是重点)
*/
public class ReflectTest12 {
    public static void main(String[] args) throws Exception{
        // 不使用反射机制怎么创建对象
        Vip vip = new Vip();
        Vip vip1 = new Vip(110,"zhangsan","2001-10-11",true);
        
        // 使用反射机制怎么创建对象呢?
        Class c = Class.forName("com.javaSe.bean.Vip");
        // 调用无参数构造方法
        Object obj = c.newInstance();
        // 调用无参数的构造方法怎么办?
        // 第一步:先获取到这个有参数的构造方法
        Constructor con = c.getDeclaredConstructor(int.class,String.class,String.class,boolean.class);
        // 第二步:调用构造方法new对象
        Object object = con.newInstance(110,"jack","1990-01-11",true);
        System.out.println(object);
        
        // 获取无参数构造方法
        Constructor cons = c.getDeclaredConstructor();
        Object obj2 = cons.newInstance();
        System.out.println(obj2);
        
    }
}

 

posted @ 2020-09-04 11:22  xlwu丶lz  阅读(181)  评论(0编辑  收藏  举报