记录下反射

反射:用来调用hide之类的方法
代码演示:
 /**
         * 反射步骤:
         * 1、获取Class对象,可以有forName、xxx.class、对象.getClass()
         * 2、获取getConstructor()对象,有参数需要传入参数类型
         * 3、获取对象实例,constructor.newInstance(),也可以直接使用class.newInstance(),区别是class只能使用无参数的构造方法
         * 4、获取方法对象,有参数需要传入方法类型
         * 5、调用invoke方法,传入instance实例对象,并传入参数
         */
        try {
            Class clz=Class.forName("com.chenyan.iamgepicker.imagepicker.data.Apple");
            Constructor constructor = clz.getConstructor(int.class);
            Apple instance = (Apple) constructor.newInstance(45);
//            Method clzMethod = clz.getMethod("setPrice", int.class);
//            clzMethod.invoke(instance,50);
            Method getPrice = clz.getMethod("getPrice");
            System.out.println("apple的price:"+getPrice.invoke(instance));
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

暴力反射:
       跟普通反射区别的是获取方法对象后需要开启暴力反射权限,如:方法对象.setAccessible(true);
为什么使用暴力反射:
       调用类中私有的成员变量或者方法

 反射机制的应用场景:
逆向代码 ,例如反编译
与注解相结合的框架 例如Retrofit
单纯的反射机制应用框架 例如EventBus 2.x
动态生成类框架 例如Gson
反射机制的优缺点:
 优点:

    运行期类型的判断,动态类加载,动态代理使用反射。

 缺点:

    性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的java代码要慢很多。

总结:
    Java的反射机制在平时的业务开发过程中很少使用到,但是在一些基础框架的搭建上应用非常广泛,今天简单的总结学习了一下,还有很多未知的知识等以后用到再做补充。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值