通过反射创建对象的方式

public class MyTest2 {
    public static void main(String[] args) throws Exception {
        //获取Class对象
        Class demo = Class.forName("Demo");

        //1、使用newInstance创建对象
        Object object = demo.newInstance();
        System.out.println(object.toString());

        //2、getDeclaredConstructor().newInstance()
        Object object1 = demo.getDeclaredConstructor().newInstance();
        System.out.println(object1.toString());
    }
}
class Demo{
    public Demo() {
        System.out.println("Demo的无参构造方法执行~");
    }
}

Demo的无参构造方法执行~
Demo@5cad8086
Demo的无参构造方法执行~
Demo@6e0be858

总结:

/**
 * 相同点:Class.newInstance()和Constructor.newInstance()都是通过反射来获取类的对象的。
 * 不同点:
 * (1)调用构造函数不同
 *      Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数;
 *      Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。
 * (2)调用构造函数是否私有不同
 *      Class.newInstance() 要求被调用的构造函数是可见的,也即必须是public类型的;
 *      Constructor.newInstance() 在特定的情况下,可以调用私有的构造函数。 即设置:
 *          Class clazzA=Class.forName("A");
 *          以下调用无参的、私有构造函数
 *          Constructor constructorA=c.getDeclaredConstructor();
 *          constructorA.setAccessible(true); //调用私有构造关键是设置这句代码
 * (3)对异常的处理不同
 *      Class.newInstance()对于捕获或者未捕获的异常均由构造器抛出;
 *      Constructor.newInstance()通常会把抛出的异常封装成InvocationTargetException抛出;
 */
原文地址:https://www.cnblogs.com/zhangzhixi/p/14220039.html