zoukankan      html  css  js  c++  java
  • 通过反射创建对象的方式

    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抛出;
     */
  • 相关阅读:
    Notes | 基于医疗知识图谱的问答系统实践
    Notes | 知识图谱介绍与Neo4J实战
    从jvm源码看synchronized
    Kakfa基础
    volatile
    JVM垃圾收集器
    原码,反码,补码
    mini设计模式
    xshell提示采购解决方法
    应试必备算法
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14220039.html
Copyright © 2011-2022 走看看