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 {@Testpublic 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 修饰的 某个 构造器 |
@Testpublic 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===>0Constructor cons2 = c.getConstructor(String.class, int.class);System.out.println(cons2.getName() + "===>" + cons2.getParameterCount());//com.csdn.pojo.Student===>2}
getDeclaredConstructor s (Class <?> . . . parameterTypes) | 获取 全部 构造器:只要你敢写,这里就能拿到,无所谓 权限 是否可及 |
@Testpublic 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) | 获取 某个 构造器:只要你敢写,这里就能拿到,无所谓 权限 是否可及 |
@Testpublic 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===>0Constructor 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 <T> getConstructor (Class<?> . . . parameterTypes) | 返回单个构造器对象(只能拿 public 的) |
Constructor <T> getDeclaredConstructor (class<?> . . . parameterTypes) | 返回单个构造器对象,存在就能拿到 |