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抛出;
     */
  • 相关阅读:
    js 复杂研究
    js 页面 保持状态 的方法
    C# 向上取整数
    js 获取dom 为null 测试
    net core 下 接受文件 测试
    layui 源码解读(部分)
    js 定时器
    js addEventListener
    C# 获得对象的命名空间 ?.
    修改maven的默认jdk版本
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14220039.html
Copyright © 2011-2022 走看看