invoke方法的使用

一般来说我们调用一个类中的方法是通过new这个对象A,然后去用A.get方法名去调用

对于invoke方法来说给我们提供了新的方式去调用方法:
(1)设置一个中间人去代替该类对象--构建一个Method对象,让这个Method对象来代替你现在要用的方法
(2)然后给中间人方法所需要的对象和参数,让中间人去代替你调用方法

反射机制的原理

  1. 反射机制应用场景:逆向代码、动态生成类框架等,使用反射机制能够大大的增强程序的扩展性。

  2. 反射的基本步骤:首先获得Class对象,然后实例化对象,获得类的属性、方法或者构造函数,最后访问属性、调用方法、调用构造函数创建对象。而invoke()方法就是用来执行指定对象的方法。

示例:

假如有这么一个类A:

public class A {
  public void foo(String name) {
    System.out.println("Hello, " + name);
  }
}

可以编写另外一个类来反射调用A上的方法:

import java.lang.reflect.Method;

public class TestClassLoad {
  public static void main(String[] args) throws Exception {
    Class<?> clz = Class.forName("A");
    Object o = clz.newInstance();
    Method m = clz.getMethod("foo", String.class);
    for (int i = 0; i < 16; i++) {
      m.invoke(o, Integer.toString(i));
    }
  }
}

​​​​​​​

总结
1.method.invoke()方法支持多态特性,其native实现在方法真正执行之前通过动态连接或者虚方法表来实现。

2.框架中使用method.invoke()执行方法调用时,初始获取method对象时,可以先调用一次setAccessable(true),使得后面每次调用invoke()时,节省一次方法修饰符的判断,略微提升性能。业务允许的情况下,Field同样可以如此操作。

3.委托模式可以解决一种方案的多种实现之间自由切换,而代理模式只能根据传入的被代理对象来实现功能。

Java--invoke方法(反射)相关推荐

  1. java invoke 方法说明_java中的反射,invoke方法

    invoke,就是通过函数名反射调用相应的函数.以下代码简单地介绍了java反射中invoke方法 package org.curry.tool; import java.lang.reflect.M ...

  2. Java 反射 ---- 方法反射的基本操作

    这一章我们通过Java的方法反射的基本操作,话不多说直接上代码. package com.wangjinduo;import java.lang.reflect.Method;public class ...

  3. java invoke 泛型_如何通过java反射调用含有泛型数组参数的方法

    最近在看一个算法课程,老师用的是c++的template和函数指针来完成一个实现,于是我想用java通过反射和泛型来完成,但是出现了问题. 希望通过java反射以及泛型来实现动态测试SortClass ...

  4. 深入理解Java中的反射机制和使用原理!详细解析invoke方法的执行和使用

    反射的概念 反射:Refelection,反射是Java的特征之一,允许运行中的Java程序获取自身信息,并可以操作类或者对象的内部属性 通过反射,可以在运行时获得程序或者程序中的每一个类型的成员活成 ...

  5. java 反射invoke_对于反射中的invoke()方法的理解

    推荐阅读(点击即可跳转阅读) 先讲一下java中的反射: 反射就是将类别的各个组成部分进行剖析,可以得到每个组成部分,就可以对每一部分进行操作.在比较复杂的程序或框架中来使用反射技术,可以简化代码提高 ...

  6. java 反射之invoke方法图解

    invoke方法的过程: 深入解析Java反射(2) - invoke方法

  7. java invoke 返回类型_解析Java反射 - invoke方法

    最近工作中涉及到获取同程火车票,大概描述为:将本地获取的发出城市,目的城市及出发时间按固定格式封装,调用接口获取可乘坐座席等级最高的火车票,接口返回数据用包含三层类封装的类接受,接受的类总共为四层,倒 ...

  8. JAVA深入研究——Method的Invoke方法。

    在写代码的时候,发现Method可以调用子类的对象,但子类即使是改写了的Method,方法名一样,去调用父类的对象也会报错,虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java ...

  9. Java 中使用反射来创建对象、调用方法

    Java 中使用反射来创建对象.调用方法 反射创建对象 反射调用方法 反射调用私有方法 反射调用可变参私有方法 反射调用的方法自身可以抛出异常的情形   假设已有下面的类: import java.l ...

  10. 深入分析 Java 方法反射的实现原理

    2019独角兽企业重金招聘Python工程师标准>>> 方法反射实例 public class ReflectCase { public static void main(Strin ...

最新文章

  1. 四种排序(冒泡、插入、递归、选择)
  2. r 多元有序logistic回归_R语言多元Logistic逻辑回归 应用案例
  3. 考公务员的本科学历可以考吗
  4. mysql 执行计划 代价_mysql explain执行计划详解
  5. hexo博客修改博文中日期的颜色
  6. Centos Cacti 0.8.8g
  7. 知网又火了!续订费近千万且连年上涨 中科院:不堪重负 停用
  8. 计算机磁盘管理使用不,win10系统提示“操作无法完成,因为磁盘管理控制台不是最新状态”的处理方法...
  9. Oracle视图分类及各种操作讲解(超级好文)
  10. 安卓view.getMeasuredHeight()得到的高度单位以及dp和px的转换
  11. python3 读取.plist文件_python读写plist文件
  12. P4816 [USACO15DEC]High Card Low Card G 题解
  13. HBase的regionServer
  14. win10家庭版 QQ2021和TIM QQ登入后马上提示恢复上次意外关闭信息,然后就卡死奔溃闪退。
  15. 【hadoop】汽车销售数据统计分析项目(部分)
  16. C++: 判断两个数互质(最大公约数为1)
  17. linux的内存占用分析,Linux 内存占用分析
  18. CF1037E. Trips
  19. Microsoft Office Excel 不能访问文件
  20. 解决手动添加打印机时无usb口的方法

热门文章

  1. CS+ for CC编译器设置记录
  2. ubuntu下右键无法打开终端(open in terminal)的解决办法
  3. 腾讯云图,让数据说话 1
  4. Apache POI 和 easyExcel
  5. 前端调用后端的接口实现excel文件下载(下载Blod文件)(附带时间格式处理方法)
  6. SpringBoot 日志脱敏,开源组件太强了!
  7. Autoware显示用户界面细节
  8. vba mysql 自动化错误_在Excel中运行VBA脚本时出现自动化错误
  9. 软件工程项目——校园二手交易系统——引言
  10. axios 拦截器不生效填坑