Class.forName 与 classObj.newInstance 方法
Class.forName(String name), 用于获取指定对象。classObj.newInstance() 返回一个classObj 随代表的类的对象。
下面通过举例来说明两个方法的使用场景:
定义一个员工类 Employee, 我们只设置了一个无参的默认构造方法。
public class Employee {
private int empno;
private String empname;
static {
System.out.println("类已被加载到JVM");
}
public Employee( ) {
System.out.println("默认构造方法被执行");
}
@Override
public String toString() {
return "Employee{" +
"empno=" + empno +
", empname='" + empname + '\'' +
'}';
}
}
顺带一说, 类中的 static 代码块, 不需要实例化即可执行, 且执行顺序先于构造方法。
我们通过 反射 机制来创建一个 Employee 对象:
public class ClassDemo {
public static void main(String[] args) {
try {
//将 指定 类加载到 JVM, 并返回Class 对象
Class empClass = Class.forName("indi.chester.classdemo.Employee");
// 通过 Class 对象.newInstance() 调用默认无参构造函数 进行实例化
Employee emp1=(Employee ) empClass.newInstance();
System.out.println(emp1);
} catch (ClassNotFoundException e) {// 找不到类 异常
e.printStackTrace();
} catch (InstantiationException e) {// 无法实例化 异常
e.printStackTrace();
} catch (IllegalAccessException e) {// 无法访问 异常
e.printStackTrace();
}
}
}
Class.forName(String name)方法传入类的完整路径 "indi.chester.classdemo.Employee",返回一个代表Employee信息的对象 empClass。
empClass.newINstance() 调用 Employee 的默认无参构造方法,返回一个 Object 对象, 需要进行强制转换成 Employee 对象。
顺带一说, Object 类是所有Java类的父类。
最后我们输出 Employee 对象, 得到下面结果:
类已被加载到JVM
默认构造方法被执行
Employee{empno=0, empname='null'}
Last updated
Was this helpful?