总结一下Class.forName的用法以及它是如何应用在动态创建对象中。
Class.forNmae主要用于当我们事先不知道类名的时候,一旦class被装载,我们将使用 newInstance() 方法来动态创建对象。
看一看以下代码
Logic.java
import java.util.Scanner;
public class Logic
{
public static void main(String args[])
{
try {
String someClassName = "";
Scanner in = new Scanner(System.in);
System.out.print("Please class name with package structure");
someClassName = in.nextLine();
Class clasz = Class.forName(someClassName);
Object obj = clasz.newInstance();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
}
}
}
当我们事先不知道类名的时候,可以用以上方法在runtime的时候动态创建对象。
通过 Scanner 可以得到控制台中输入的类名,当然类名的来源还有很多种,
Scanner in = new Scanner(System.in);
System.out.print("Please class name with package structure");
someClassName = in.nextLine();
然后创建类名对应的 Class 对象,
Class clasz = Class.forName(someClassName);
调用对象类 clasz 的 newInstance() 方法实例化我们需要的对象,
Object obj = clasz.newInstance();
注意在这个过程中可能存在异常,需要用 try catch 来捕获潜在的异常。
最终我们动态创建出了一个我们事先不知道名字的对象。 🙂