java.lang.reflect.Constructor

一、Constructor类是什么
Constructor是一个类,位于java.lang.reflect包下。
在Java反射中 Constructor类描述的是 类的构造方法信息,通俗来讲 有一个类如下:

package com.testReflect;
public class ConstructorDemo {
    private int num;
    private String str;
    
    public ConstructorDemo(){
        num = 2;
        str = "xixi";
    }
    
    public ConstructorDemo(int num,String str){
        this.num = num;
        this.str = str;
    }

    @Override
    public String toString() {
        return "ConstructorDemo [num=" + num + ", str=" + str + "]";
    }
}

在Java反射中ConstructorDemo类中的构造方法ConstructorDemo()、ConstructorDemo(int num,String str)都是Constructor类的实例,这个Constructor类的实例描述了构造方法的全部信息。(包括:方法修饰符、方法名称、参数列表 等等)

二、如何获取Constructor类对象
一共有4种方法,全部都在Class类中:
– getConstructors():获取类中的公共方法
– getConstructor(Class[] params): 获取类的特定构造方法,params参数指定构造方法的参数类型
– getDeclaredConstructors(): 获取类中所有的构造方法(public、protected、default、private)
– getDeclaredConstructor(Class[] params): 获取类的特定构造方法,params参数指定构造方法的参数类型

三、Constructor类中常用的方法
对于构造方法,我们就是用来创建类的实例的,但是在Java反射中需要注意的是:默认构造函数和带参数的构造方法创建实例的区别。

package com.testReflect;

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

public class ConstructorTest {
    public static void main(String[] args) throws Exception {
        //使用反射第一步:获取操作类ConstructorDemo所对应的Class对象
        Class cls = Class.forName("com.testReflect.ConstructorDemo");
        
        //获取默认的构造函数
        Constructor constructor1 = cls.getConstructor(new Class[]{});
        //获取构造函数信息
        System.out.println("修饰符: "+Modifier.toString(constructor1.getModifiers()));
        System.out.println("构造函数名: "+constructor1.getName());
        System.out.println("参数列表: "+constructor1.getParameterTypes());
        //通过默认的构造函数创建ConstructorDemo类的实例
        constructor1.setAccessible(true);
        Object obj = constructor1.newInstance();
        System.out.println("调用默认构造函数生成实例:"+obj.toString());
        
        System.out.println("===============================================");
        
        //获取带参数的构造函数
        Constructor constructor2 = cls.getConstructor(new Class[]{int.class,String.class});
        System.out.println("修饰符: "+Modifier.toString(constructor2.getModifiers()));
        System.out.println("构造函数名: "+constructor2.getName());
        System.out.println("参数列表: "+constructor2.getParameterTypes());
        //获取构造函数信息
        //通过带参数的构造函数创建ConstructorDemo类的实例
        constructor2.setAccessible(true);
        Object obj2 = constructor2.newInstance(new Object[]{33,"haha"});
        System.out.println("调用带参数构造函数生成实例:"+obj2.toString());
    }
}

 

https://www.cnblogs.com/xinhuaxuan/p/6019524.html

 

Leave a Reply

Your email address will not be published. Required fields are marked *