classObj.getConstructor 方法

Class.getConstructor()方法, 获取指定类的public 构造方法的 Constructor 对象。

我们定义一个员工类 Employee, 设置一个带参构造方法。

 public class Employee {
    private int empno;
    private String empname;

    static {
        System.out.println("类已被加载到JVM");
    }

    public Employee(int empno, String empname ) {
        this.empno = empno;
        this.empname = empname;
        System.out.println("带参构造方法被执行");
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empno=" + empno +
                ", empname='" + empname + '\'' +
                '}';
    }

}

我们依然通过反射机制 来创建Employee对象

public class ConstructorDemo {

    public static void main(String[] args) {

        try {
            //将 指定 类加载到 JVM, 并返回Class 对象
            Class empClass = Class.forName("indi.chester.constructordemo.Employee");

            // 通过 Class 对象.getConstructor() 获得 Constructor 对象
            Constructor empConstructor= empClass.getConstructor(new Class[]{int.class, String.class});

            //通过Constructor对象.newInstance() 调行代参构造函数
            Employee  emp1=(Employee ) empConstructor.newInstance( new Object[] {20200189,"Tom"});
            System.out.println(emp1);

        } catch (ClassNotFoundException e) {// 找不到类 异常
            e.printStackTrace();
        } catch (NoSuchMethodException e) {// 找不到方法 异常
            e.printStackTrace();
        } catch (InstantiationException e) {// 无法实例化 异常
            e.printStackTrace();
        } catch (IllegalAccessException e) {// 无法访问 异常
            e.printStackTrace();
        } catch (InvocationTargetException e) {// 调用方法内部出现异常
            e.printStackTrace();
        }

    }
}

Class.forName()方法传入类的完整路径 "indi.chester.classdemo.Employee",返回一个代表Employee信息的对象 empClass。

empClass.getConstructor() 传入Employee 类public带参构造方法的 参数类型数组 new Class[]{int.class, String.class}, 返回一个 代表Employee 构造方法的 Constructor 对象 empConstructor。

empConstructor.newInstance() 传入 Employee 带参构造函数的参数数组, 返回一个 Employee 对象 emp1。

最后, 通过 println() 输出,结果如下:

类已被加载到JVM
带参构造方法被执行
Employee{empno=20200189, empname='Tom'}

Last updated

Was this helpful?