通过反射创建运行时类对象

2021-12-02 0 By admin

一、通过反射,创建运行时类的对象

Class 类可以通过 newInstance() 方法创建一个运行时类的对象。
newInstance():调用此方法,创建对应的运行时类的对象。此方法内部调用了运行时类的空参的构造器。

1.1、newInstance()使用条件

要想此方法正常的创建运行时类的对象,要求:

  1. 运行时类必须提供空参的构造器
  2. 空参的构造器的访问权限得够。通常,设置为public。

1.2、空参构造器说明

在javabean中要求提供一个public的空参构造器。原因:

  1. 便于通过反射,创建运行时类的对象
  2. 便于子类继承此运行时类时,默认调用super()时,保证父类有此构造器

1.3、代码示例

import org.junit.Test;
public class NewInstanceTest {
  @Test
  public void test() throws Exception {
    Class<Person> clazz = Person.class;
    Person obj = clazz.newInstance();
    System.out.println(obj);
  }
}

二、举例体会反射的动态性

反射的功能使Java 编程语言具有动态语言的能力。这里举例说明反射的动态性。

import org.junit.Test;
import java.util.Random;
public class NewInstanceTest {
  @Test
  public void test2(){
    for(int i = 0;i < 100;i++){
      int num = new Random().nextInt(3);//0,1,2
      String classPath = "";
      switch(num){
        case 0:
          classPath = "java.util.Date";
          break;
        case 1:
          classPath = "java.lang.Object";
          break;
        case 2:
          classPath = "www.java.Person";
          break;
      }
      try {
        Object obj = getInstance(classPath);
        System.out.println(obj);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  /**
   * 创建一个指定类的对象。
   * classPath:指定类的全类名
   * @param classPath
   * @return
   * @throws Exception
   */
  public Object getInstance(String classPath) throws Exception {
    Class clazz =  Class.forName(classPath);
    return clazz.newInstance();
  }
}