• Java反射的三种实现方式


    第一种:通过Object类的getClass方法

    @Test
        public void test01() throws IllegalAccessException, InstantiationException {
            //new 对象
            Date date = new Date();
            System.out.println(date);
            //1.反射第一种方式,用自己找出自己,并创建自己
            Date date1 = date.getClass().newInstance();
            System.out.println(date1);
            System.out.println(date == date1);
        }

    第二种:通过对象实例方法获取对象

    @Test
        public void test02() throws IllegalAccessException, InstantiationException {
            //第二种:通过对象实例方法获取对象
            Class<Date> dateClass = Date.class;
            System.out.println(dateClass);
            Date date = dateClass.newInstance();
            System.out.println(date);
        }

    第三种:通过Class.forName方式

    @Test
        public void test03() throws IllegalAccessException, InstantiationException, ClassNotFoundException {
            //反射的第三种方式,用java的class根据类的出处创建对象
            Class<Date> aClass = (Class<Date>) Class.forName("java.util.Date");
            Date date = aClass.newInstance();
            System.out.println(date);
        }

    对于有空构造函数的类 可以直接用字节码文件获取实例:

    Object o = clazz.newInstance();   // 会调用空参构造器 如果没有则会报错

    对于没有空的构造函数的类则需要先获取到他的构造对象 在通过该构造方法类获取实例:

    Constroctor constroctor = clazz.getConstructor(String. class , int . class ); // 获取构造函数
     
    Object obj = constroctor.newInstance( "jack" , 18 ); // 通过构造器对象的newInstance方法进行对象的初始化

    参考博客:https://blog.csdn.net/qq_27026603/article/details/78904248

  • 相关阅读:
    总结vue中render的使用
    到底什么时候需要用到监听
    vue场景中的小知识点总结
    《驱动学习 —— sysfs文件系统的编写》
    《wsl中安装ubuntu,并修改默认安装盘符》
    (二)SpringCloudAlibabaOpenFeign远程服务调用
    (五)使用docker安装mysql
    (二)linux虚拟机网络设置
    (六)使用docker安装redis
    (一)SpringCloudAlibabaNacos注册中心
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/15606774.html
Copyright © 2020-2023  润新知