可以用于只知道类的名字然后想实例化的情况.
    先定义一个类

    1. class User {
    2. private int age;
    3. private String name;
    4. public User() {
    5. super();
    6. }
    7. public User(String name) {
    8. super();
    9. this.name = name;
    10. }
    11. public User(int age, String name) {
    12. super();
    13. this.age = age;
    14. this.name = name;
    15. }
    16. public int getAge() {
    17. return age;
    18. }
    19. public void setAge(int age) {
    20. this.age = age;
    21. }
    22. public String getName() {
    23. return name;
    24. }
    25. public void setName(String name) {
    26. this.name = name;
    27. }
    28. @Override
    29. public String toString() {
    30. return "User [age=" + age + ", name=" + name + "]";
    31. }
    32. }

    然后实例化的时候用到的东西:

    • newInstance : Class 对象调用的话用默认构造方法来实例化,构造方法对象调用的话就是用那个方法.
    • getConstructor : 得到所有构造函数,是 Constructor 类型.
    • getParameterTypes 得到构造函数的签名,是 Class 类型的数组. ```java public class ReflectionTest { public static void main(String[] args) throws Exception {

        Class<?> class1 = Class.forName("com.tianmaying.User");
      
        // 第一种方法,调用Class的newInstance()方法,这会调用类的默认构造方法     
        User user = (User) class1.newInstance();
      
        user.setAge(20);
        user.setName("tianmaying");
        System.out.println(user);
      
        // 第二种方法 先取得全部的构造函数,然后使用构造函数创建对象
        Constructor<?> cons[] = class1.getConstructors();
    
        for (int i = 0; i < cons.length; i++) {
            // 查看每个构造方法需要的参数
            Class<?> clazzs[] = cons[i].getParameterTypes();
    
            // 打印构造函数的签名
            System.out.print("cons[" + i + "] (");
            for (int j = 0; j < clazzs.length; j++) {
                if (j == clazzs.length - 1)
                    System.out.print(clazzs[j].getName());
                else
                    System.out.print(clazzs[j].getName() + ",");
            }
            System.out.println(")");
        }
    
        // 调用构造函数
        user = (User) cons[0].newInstance("tianmaying");
        System.out.println(user);
    
        // 调用另一个构造函数
        user = (User) cons[1].newInstance(20, "tianmaying");
        System.out.println(user);
    }
    

    } ```