package cn.mb.demo2;
import java.lang.constant.Constable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
- author 骚彬
- date 2019/8/1 9:59
/
/
反射方式获取构造方法并使用
Constructor对象
构造器对象,属于java.base模块, java.lang.reflect包
通过Class对象获取构造器对象
◆getConstructor(Class<?> … parameterTypes)
返回一个Constructor对象,仅公共构造函数Class<?> … :可变参数,代表Class类型的数组 ? :通配符,代表不确定的任意类型
◆getDeclaredConstructor(Class <?> … parameterTypes)
返回一个Constructor对象,可获取私有构造函数
◆getConstructors(
返回此类所有(不含私有)构造函数的数组
Constructor的常用方法
◆String getName(
返回构造函数名
◆T newInstance(Object… initargs)
使用此构造函数和指定参数创建并初始化对象
/
/
Class类
成员方法:
public Constructor ge tConstructor (Class… params) ,
根据参数列表,获取对应的构造器对象(仅限公共构造函数)
public Constructor ge tDeclaredConstructor (Class… params);
根据参数列表,获取对应的构造器对象(包含私有构造函数)
public Constructors getConstructors(); 获取此类所有的构造函数 (不含私有)
-
Constructor类: 构造器类
-
概述:属于java. base模块下的java. lang. reflect包下的类
成员方法:
public String getName (); 获取构造函数名
public TnewInstances (0bject. … params) ; 根据此构造函数和指定参数创建对象
*/
public class ReflectDemo1 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
//需求:通过反射的方式创建:student类型的对象
// //1.获取Student类的字节码对象
Class clazz = Class.forName(“cn.mb.demo2.Student”);
// //2.根据字节码对象,获取指定构造器对象
// //2.1获取公共无参构造
// Constructor con1 = clazz.getConstructor();
// System.out.println(con1);
// //2.2获取公共有参构造
// Constructor con2 = clazz.getConstructor(String.class);
// System.out.println(con2);
// //2.3获取私有有参构造
// Constructor con3=clazz.getDeclaredConstructor(int.class);
// System.out.println(con3);
// System.out.println("-----------------------");
// //获取Student类所有公共的构造函数
// Constructor[] con4=clazz.getConstructors();
// for (Constructor con : con4) {
// System.out.println(con4);
// }
//2.2获取公共有参构造
Constructor con2 = clazz.getConstructor(String.class);
System.out.println(con2);
//获取构造器名字
String name = con2.getName();
System.out.println(name);//3.根据构造器对象和参数,创建对应的student对象 Student stu=(Student) con2.newInstance("mb"); //4.打印结果 System.out.println(stu);
}
}
package cn.mb.demo2;
/**
-
author 骚彬
-
date 2019/8/1 10:00
*/
public class Student {
//公共无参数构造
public Student(){}
//公共有参数构造
public Student(String name){
System.out.println(“name:”+name);
}
//私有有参数构造
private Student(int age){
System.out.println(“age:”+age);
}
}
***输出结果:***"
C:\Program Files\Java\jdk-12.0.1\bin\java.exe" “-javaagent:D:\Java\idea\IntelliJ IDEA Community Edition 2019.1.3\lib\idea_rt.jar=51452:D:\Java\idea\IntelliJ IDEA Community Edition 2019.1.3\bin” -Dfile.encoding=UTF-8 -classpath G:\java.idea\out\production\java.idea cn.mb.demo2.ReflectDemo1
public cn.mb.demo2.Student(java.lang.String)
cn.mb.demo2.Student
name:mb
cn.mb.demo2.Student@30dae81
Process finished with exit code 0