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