Java 反射
通常,new运算符用于创建对象,但是如果我们想要决定在运行时创建的对象类型,我们就无法使用new运算符。在这种情况下,我们必须使用newInstance()方法。考虑一个例子:
// Java program to demonstrate working of newInstance()
// Sample classes
class A { int a; }
class B { int b; }
public class Test
{
// This method creates an instance of class whose name is
// passed as a string 'c'.
public static void fun(String c) throws InstantiationException,
IllegalAccessException, ClassNotFoundException
{
// Create an object of type 'c'
Object obj = Class.forName(c).newInstance();
// This is to print type of object created
System.out.println("Object created for class:"
+ obj.getClass().getName());
}
// Driver code that calls main()
public static void main(String[] args) throws InstantiationException,
IllegalAccessException, ClassNotFoundException
{
fun("A");
}
}
输出:
Object created for class:A
Class.forName()方法返回类我们在其上调用newInstance()方法的类对象,它将返回我们作为命令行参数传递的该类的对象。 如果传递的类不存在则会发生ClassNotFoundException。如果传递的类不包含默认构造函数,则会发生InstantionException,因为newInstance()方法在内部调用该特定类的默认构造函数。如果我们无法访问指定类定义的定义,则会发生IllegalAccessException。