反射获取Constructor、Field、Method对象

1、获取构造器

Constructor [ ]    getConstructor s   ( )  获取全部的构造器:只能获取 public 修饰的构造器
package com.csdn.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test;
import java.lang.reflect.Constructor;
public class Print {
    @Test
    public void test01() {
        //a.第一步:获取类对象
        Class c = Student.class;
        //b.提取类中的全部的构造器对象
        Constructor[] constructors = c.getConstructors();
        //c.遍历构造器
        for (Constructor constructor : constructors) {
            System.out.println(constructor.getName() + "===>" + constructor.getParameterCount());
//          com.csdn.pojo.Student===>0
//          com.csdn.pojo.Student===>2
        }
    }
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Student {
    private String name;
    private int age;
}
getConstructor(Class . . .   parameterTypes) 获取某个构造器:只能拿 public 修饰的 某个 构造器
    @Test
    public void test02() throws NoSuchMethodException {
        //a.第一步:获取类对象
        Class c = Student.class;
        //b.定位单个构造器对象(按照参数定位无参数构造器)
        Constructor cons = c.getConstructor();

        System.out.println(cons.getName() + "===>" + cons.getParameterCount());
        //com.csdn.pojo.Student===>0

        Constructor cons2 = c.getConstructor(String.class, int.class);
        System.out.println(cons2.getName() + "===>" + cons2.getParameterCount());
        //com.csdn.pojo.Student===>2
    }
getDeclaredConstructor s (Class . . . parameterTypes) 获取 全部 构造器:只要你敢写,这里就能拿到,无所谓   权限 是否可及

 

    @Test
    public void test04() throws NoSuchMethodException {
        //a.第一步:获取类对象
        Class c = Student.class;
        //b.定位单个构造器对象(按照参数定位无参数构造器)
        Constructor[] cons = c.getDeclaredConstructors();
        //c.遍历构造器
        for (Constructor constructor : cons) {
            System.out.println(constructor.getName() + "===>" + constructor.getParameterCount());
            //com.csdn.pojo.Student===>0
            //com.csdn.pojo.Student===>2
        }

    }
@Data
class Student {
    private String name;
    private int age;

    private Student() {
    }

    private Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
getDeclaredConstructor (Class . . .   parameterTypes) 获取 某个 构造器:只要你敢写,这里就能拿到,无所谓  权限 是否可及
    @Test
    public void test03() throws NoSuchMethodException {
        //a.第一步:获取类对象
        Class c = Student.class;
        //b.定位单个构造器对象(按照参数定位无参数构造器)
        Constructor cons = c.getDeclaredConstructor();
        System.out.println(cons.getName() + "===>" + cons.getParameterCount());
        //com.csdn.pojo.Student===>0

        Constructor cons2 = c.getDeclaredConstructor(String.class, int.class);
        System.out.println(cons2.getName() + "===>" + cons2.getParameterCount());
        //com.csdn.pojo.Student===>2
    }
@Data
class Student {
    private String name;
    private int age;

    private Student() {
    }

    private Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

使用反射技术获取构造器对象并使用

  • 反射的第一步是先得到类对象,然后从类对象中获取类的成分对象
  • Class类中用于获取构造器的方法
    方法 说明
    Constructor [ ] getConstructors ( ) 返回所有构造器对象的数组(只能拿 public 的)
    Constructor [ ] getDeclaredConstructors() 返回所有构造器对象的数组,存在就能拿到
    Constructor     getConstructor (Class . . . parameterTypes) 返回单个构造器对象(只能拿 public 的)
    Constructor     getDeclaredConstructor (class . . . parameterTypes) 返回单个构造器对象,存在就能拿到

你可能感兴趣的:(#,反射原理,java,反射,reflect)