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?