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. Python3基础教程:元类详解
  2. 【译】Hard Forks, Soft Forks, Defaults and Coercion
  3. 【18】让接口容易被正确使用,不易被误用
  4. MySQL(十)操纵表及全文本搜索
  5. Cadence 电源完整性仿真实践(二)
  6. 使用ASP .NET (C#) 產生PDF檔的好幫手—iTextSharp library (上)
  7. markdown:轻松转成html 并加载本地图片
  8. 《软件工程导论》考研复习
  9. uniapp app中导出手机号码到通讯录
  10. Redis学习之lpush命令
  11. 网络层(六)MAC地址与IP地址
  12. c语言pow的作用,c语言中pow函数的用法是什么?
  13. 通过路由器映射 配置 远程访问
  14. CentOS7系统清理缓存数据命令
  15. 触摸屏:Linux输入子系统:多点触控协议
  16. 【深度好文】Python图像处理之物体标识与面积测量
  17. 武汉市服务业领军企业认定条件、流程及申报政策奖励补贴标准
  18. ubuntu更改更新源
  19. 程序员进阶之排错和避坑方法GitChat将要出炉
  20. 内网渗透:二、内网渗透的信息收集

热门文章

  1. 类变量、成员变量、局部变量存放位置
  2. 蓝牙遥控器 – 将手机模拟为键盘、鼠标、翻页笔、遥控器
  3. DC/DC升压转换器AAT1118 贴片TSSOP16 可调式三通道TFT LCD液晶屏显示IC芯片
  4. 【总结整理】产品经理总结
  5. 送程序员男朋友的生日礼物——3天速成简易C++程序
  6. pdf怎么加水印,pdf加水印简单方法
  7. 【安装版】Win8.1专业版系统资源_ISO_ESD格式镜像
  8. 14.6.2 创建普通员工类
  9. 信访分析 大数据_【信访微观察】“大数据”有多火?化解信访矛盾也用上了它!...
  10. 根据卡号前6位判断开户银行