iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java的invoke方法的具体使用
  • 425
分享到

Java的invoke方法的具体使用

2024-04-02 19:04:59 425人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

如果读一些Java或者相关框架的源码,实际上一定会经常出现invoke方法的调用,在自己或者团队封装框架时,如果有时候弄得不好经常也会报invoke相关的错。 invoke方法是干什

如果读一些Java或者相关框架源码,实际上一定会经常出现invoke方法的调用,在自己或者团队封装框架时,如果有时候弄得不好经常也会报invoke相关的错。

invoke方法是干什么的?有什么具体用途?

首先要了解invoke方法干什么的以及具体用途,实际你要搞清他在源码那个class文件上,他在那个包里,追根溯源。

invoke方法来自Method类,可能不会像我们经常用到的基础类型包装类,以及集合类还有他们的扩展和工具类使用的那么多。

但是Method类所在的包可是大名鼎鼎的反射Reflact,不是有一句话Java没有反射,那么很多框架都不会存在。

我们经常new 对象出来,但是new的前提是你知道你到底需要什么对象,你才能new,然而不管是代码还是现实生活都有未知性,也就是直到程序运行时受条件限制才知道什么类,什么方法。

反射解决的这个问题,运行时获取对象结构,调用方法。
Method这个类就是关于反射调用方法的
下图是Method类的官方注解

在这里插入图片描述

大概意思就是说提供类或者接口的方法信息,就可以访问调用对应的方法。

invoke的意思上就有调用的意思,也就是说我们可以通过反射包下的Method类调用invoke方法,调用我们所提供的方法以及调用方法的参数来完成动态调用。

也就是根据你给的对象/实例,方法名,以及参数来调用。找了个“替身”来帮你调用方法。

2 invoke方法的使用
实际上invoke方法的使用,和我们常见的有所区别。

我们经常创建一个对象A,A对象里面的方法getA()方法,然后A.getA()

我们采用新的方式调用
(1)弄一个方法的“替身”(其实就是构建一个Method对象,让这个Method对象来代替你现在要用的方法)
(2)然后给替身需要的对象和参数,让替身去替你调用(像JOJO的替身替你去战斗)

具体代码演示如下:

public class InvokeTest {
    public void test(String[] arg){
        for (String string : arg) {
            System.out.println("zp is " + string);
        }
    }
    @Test
    public void invokeDemo() throws Exception {
        //获取字节码对象,这里要填好你对应对象的包的路径
        Class<InvokeTest> clazz = (Class<InvokeTest>) Class.forName("com.example.zp.demo.testDemo.InvokeTest");
        //形式一:获取一个对象
//        Constructor con =  clazz.getConstructor();
//        InvokeTest m = (InvokeTest) con.newInstance();
        //形式二:直接new对象,实际上不是框架的话,自己写代码直接指定某个对象创建并调用也可以
        InvokeTest m = new InvokeTest();
        String[] s = new String[]{"handsome","smart"};
        //获取Method对象
        Method method = clazz.getMethod("test", String[].class);
        //调用invoke方法来调用
        method.invoke(m, (Object) s);
    }

所以使用invoke方法要比别的方法多做一步,就是构建一个Method对象,这个对象替代的是现在程序要调用方法的替代品。

而且除了参数以外,invoke还会多要一个对象,因为方法调用需要对象,所以invoke要想调用的目标方法,就需要目标方法的需要的对象。

看起来invoke方法不仅比平常方法直接调用要麻烦很多,但是你有想过吗,我只需要输入参数,我可以调用替代各种方法,在未知的情况下,根据条件决定去调用什么对象,什么方法,一下子就让代码变得灵活,这不仅是invoke的妙处,也是整个反射的妙处,在程序运行时根据条件灵活使用。

到此这篇关于Java的invoke方法的具体使用的文章就介绍到这了,更多相关Java invoke 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java的invoke方法的具体使用

本文链接: https://www.lsjlt.com/news/165196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java的invoke方法的具体使用
    如果读一些Java或者相关框架的源码,实际上一定会经常出现invoke方法的调用,在自己或者团队封装框架时,如果有时候弄得不好经常也会报invoke相关的错。 invoke方法是干什...
    99+
    2022-11-13
  • java的invoke方法怎么使用
    在Java中,invoke方法用于调用一个方法或构造函数。 invoke方法有两种使用方式: 对于普通方法的调用: Object...
    99+
    2023-10-23
    java
  • java invoke方法的作用是什么
    Java中的invoke方法可以用于调用对象的方法或访问对象的属性。它可以通过反射机制在运行时动态地调用对象的方法或访问对象的属性,...
    99+
    2023-10-19
    java
  • java反射及Method的Invoke方法
    Java反射机制是指在运行时动态获取类的信息并操作类的属性、方法、构造器等。通过反射机制可以在运行时动态创建对象、调用方法、获取字段...
    99+
    2023-09-15
    Java
  • 详解Java中Method的Invoke方法
    在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到Method,这时去调用父类的对象也会报错...
    99+
    2023-05-31
    java method invoke
  • java反射之invoke方法怎么使用
    Java反射中的invoke方法用于调用指定对象的方法。它的使用方式如下:1. 获取Class对象:首先需要获取到要调用方法的对象的...
    99+
    2023-08-18
    java invoke
  • Python3re.search()方法的具体使用
    re.search()方法扫描整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None。 与re.match()方法不同,re.match()方法要求必须从字符串的开头进行匹...
    99+
    2022-11-11
  • numpy.insert()的具体使用方法
    目录1. 参数说明2. 示例2.1. 插入一列,值为标量2.2. 插入一列,值为一维矩阵2.3. 插入多列,值为标量2.4. 输入为一维向量2.5. 输入为矩阵numpy.inser...
    99+
    2023-02-09
    numpy.insert()使用
  • Pythonlistsort方法的具体使用
    目录描述 语法 使用示例 1. 所有参数都省略 2. 指定key参数 3. 指定reverse参数 注意事项 1. sort函数会改变原列表顺序 2. 列表元素类型不一致 3. Py...
    99+
    2022-11-12
  • java中invoke方法的参数有哪些
    在Java中,invoke方法的参数有以下几种:1. 调用的对象(或者类):可以是一个实例对象或者一个类对象。2. 方法名:要调用的...
    99+
    2023-08-08
    java invoke
  • Python中str.format()方法的具体使用
    目录1. 术语说明 2. 简单字段名 2.1 简单字段名的说明 2.2 省略字段名 2.3 数字形式的简单字段名 2.4 变量名形式的简单字段名 2.5 简单字段名的混合使用 2.6...
    99+
    2022-11-12
  • Vue中使用TailwindCSS的具体方法
    目录1. 快速使用2. 快速了解 Tailwind CSS 类3. 在 Tailwind CSS 中使用 flex 布局4. 实现常见的布局5. 实现黑白主题切换6. Tailwin...
    99+
    2023-05-14
    Vue使用Tailwind CSS Vue Tailwind CSS
  • PHP中upload.php的具体使用方法
    这篇文章主要介绍“PHP中upload.php的具体使用方法”,在日常操作中,相信很多人在PHP中upload.php的具体使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中upload.php的...
    99+
    2023-06-17
  • Java中LocalDateTime的具体用法
    目录一.背景二.简介 三.实战3.1 LocalDate的创建与使用3.2 LocalTime的创建与使用3.3 LocalDateTime的创建与使用一.背景 本文主要介...
    99+
    2023-01-15
    Java LocalDateTime
  • C语言结构体的具体使用方法
    目录初识C语言结构体1.为什么要有结构体2.结构体的定义2.1结构体类型的定义2.2定义结构体普通变量及访问2.3定义结构体指针变量及访问初识C语言结构体 1.为什么要有结构体 (1...
    99+
    2022-11-12
  • Java第三方库JodaTime的具体使用
    目录1、使用JodaTime 2、获取DateTime实例 3、使用DateTime的方法 4、使用Property的 5、其他的静态方法 结语 Java8之前的时间库中存在一些设计...
    99+
    2022-11-12
  • 深入解析Java中反射中的invoke()方法
    先讲一下java中的反射: 反射就是将类别的各个组成部分进行剖析,可以得到每个组成部分,就可以对每一部分进行操作 反射机制应用场景:逆向代码、动态生成类框架等,使用反射机制能够大大的...
    99+
    2022-11-12
  • Linux的iptstate命令具体使用方法
    这篇文章主要介绍“Linux的iptstate命令具体使用方法”,在日常操作中,相信很多人在Linux的iptstate命令具体使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux的iptstat...
    99+
    2023-06-28
  • Dev-C++调试方法的具体使用
    目录写在前面具体步骤0. 确定编译器1. 开启调试模式2. 代码调试写在前面 已经弃坑Dev-C++有一段时间了,但作为一款轻量且新手友好的IDE,它往往是入门C/C++以及刷算法题...
    99+
    2022-11-13
  • java中Thread.sleep()的具体使用
    目录sleep功能介绍:sleep Thread.sleep()被用来暂停当前线程的执行,会通知线程调度器把当前线程在指定的时间周期内置为wait状态。当wait时间结束,线程状态重...
    99+
    2023-05-17
    java Thread.sleep
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作