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抛出;
     */
  • 相关阅读:
    python 中 print函数的用法详解
    可转债操作一览
    Python基本数据类型
    python的列表
    理财的方法
    92、Multiple commands produce Info.plist 报错
    91、最新cocoaPods安装与使用
    90、引入头文件不提示
    89、instancetype和id的区别
    88、const、static、extern介绍
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14220039.html
Copyright © 2011-2022 走看看