调用方法与访问字段类似,

  • 通过Class实例的方法获得Method实例 getMethod()、getDeclaredMethod()、getMethods()、getDeclaredMethods()(这里的方法与获得Field字段的时候的用法是一致的)
  • 通过Method实例可以获得有关方法的信息 getName()、getReturnTypes()、getParameterTypes()、getModifiers() (方法的名字、返回类型、参数类型、修饰符)
  • 通过Method实例调用某个对象的方法 invoke()函数

1、通过Method实例调用某个对象的方法

invoke()方法的例子

package reflect;
import java.lang.reflect.Method;/*** @className:GetMethod;* @time:2022-05-17-21:04;* @author:Lee Ye;* @description:这是一个java示例;*/
public class GetMethod {public static void main(String[] args) throws Exception{String s1 = "Hello Java";String t1 = s1.substring(6);System.out.println(t1);System.out.println("-------------测试通过反射调用方法-----------");String s2 = "Hello world";//getMethod 需要传入两个参数,一个是方法名,另一个是该方法名需要的参数类型,//getMethod 的返回值是Method对象//substring 有两个重载方法, substring(int begin)、substring(int begin, int end)Method m1 = s2.getClass().getMethod("substring", int.class);Method m2 = String.class.getMethod("substring", int.class, int.class);// invoke 是Method对象中的一个调用方法的方法,返回值是 Object 类型,下面做了强制转换// invoke 第一个参数是 对象实例, 后面跟着的是可变参数,参数类型要与上面getMethod方法对应String t2 = (String)m1.invoke(s2, 6);String t3 = (String)m2.invoke(s2, 3, 6);System.out.println(t2);System.out.println(t3);}
}

2、调用静态方法

主要特殊的地方在无需指定实例对象,在invoke的第一个参数为null值

     //Main方法里面的内容System.out.println("----------测试通过反射调用静态方法----------");Method m3 = Integer.class.getMethod("parseInt", String.class);Integer t4 = (int)m3.invoke(null, "1234");System.out.println(t4);System.out.println(t4.getClass().toString());

3、调用非public方法

涉及到非public的修饰的方法,通过设置访问权限之后来调用,Method.setAccessible(true);

        //Main方法里面的内容System.out.println("------------测试访问非public方法-----------");Per p = new Per();//注意无参数的参数为nullMethod m4 = p.getClass().getDeclaredMethod("Print",null);m4.setAccessible(true);Object obj = m4.invoke(new Per(), null);//System.out.println(obj);class Per{private void Print(){System.out.println("成功调用非public方法");}
}

4、多态

遵循着 编译看左边,运行看右边的原则,虽然获取的是 Per 中的方法,但是实际执行看的还是 Stu 中的方法

        //Main里面的内容System.out.println("------------测试多态-----------");Method m5 = p.getClass().getDeclaredMethod("Echo");Object obj2 = m5.invoke(new Stu(), null);class Per{private void Print(){System.out.println("成功调用非public方法");}public void Echo(){System.out.println("Per:Hello");}
}
class Stu extends Per{@Overridepublic void Echo(){System.out.println("Stu:Hello");}
}

Java反射-调用方法相关推荐

  1. java 反射调用方法_java的反射机制,以及通过反射获取方法,变量等操作

    我们应用会用到反射这个知识点,肯定是想要在运行时得到类的信息,根据类的那些信息去做一些特定的操作.那么,首先无疑就是得到类的信息,在JDK中提供了Class对象来保存类的信息.所以,反射的第一步就是得 ...

  2. Java 反射调用方法实例,动态动用方法实例

    包结构 Hello.java package test;public class Hello {public double add (double score1, double score2){ret ...

  3. 利用java反射调用类的的私有方法

    http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...

  4. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  5. java中如何使用反射调用方法以及获得类中的属性

    使用反射获取类中的方法: 1):获取方法所在类的字节码对象. 2):获取方法. ------------------------------------------------------------ ...

  6. 【Java】Java反射调用可变参数的方法

    文章目录 1.概述 1.概述 因为要Java反射调用可变参数的方法,所以参考了这篇文章:https://www.cnblogs.com/huqingchen/p/5979936.html 但是测试过程 ...

  7. java 反射 set方法_java 反射调用set方法

    Java语言中的许多库类名称,多与咖啡有关.下面是小编为您带来的java 反射调用set方法,希望对大家有所帮助. java 反射调用set方法: import java.beans.Property ...

  8. 关于反射调用方法的一个log

    [Loaded sun.reflect.GeneratedMethodAccessor197 from __JVM_DefineClass__]  请问报这个是什么意思? 这是Sun实现的Java标准 ...

  9. .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)...

    大家都说反射耗性能,但是到底有多耗性能,哪些反射方法更耗性能:这些问题却没有统一的描述. 本文将用数据说明反射各个方法和替代方法的性能差异,并提供一些反射代码的编写建议.为了解决反射的性能问题,你可以 ...

最新文章

  1. ios 折线图_《解神者》ios和安卓互通吗 ios和安卓互通分析
  2. 安装 esl php 模块,ESL系统的Docker化部署
  3. 让你的JS代码更具可读性
  4. pandas中的括号索引
  5. php stripslashes 去除反斜线
  6. 计算机中函数counta表示,excel中counta函数的使用方法
  7. 《大数据》第1期“论坛”——对大数据国家战略的几点考虑
  8. 任意电脑登录MySQL_使用批处理命令注册运行mysql数据库,无需注册mysql服务,可以在任意电脑登录使用...
  9. git创建仓库,并提交代码(第一次创建并提交)(转)
  10. c语言开发独立游戏,游戏项目一:c语言实现三子棋
  11. 有一动态生成的TABLE,当点击该TABLE中的按钮时,如何得到该按钮所在行的某一列的值啊?...
  12. 重装64位WIN7之后再装KUBUNTU遇到的问题
  13. axios传参 后台接收为空
  14. 浏览器之硬件加速机制
  15. 古代小说鉴赏辞典 - 郭子仪
  16. 数据结构课程设计 重言式判别
  17. Unity热更新机制
  18. 计算机桌面上常见的图标有,win10白图标修复的方法是什么_win10电脑桌面图标显示白色方块的解决方法-系统城...
  19. 社会管理网格化 源码_威县方家营镇创新“网格化”管理模式,助推乡村社会治理能力提升...
  20. 项目经理面试时常见的18个问题及回答技巧

热门文章

  1. Android_ScaleGestureDetector多点触控
  2. 计算机科学的读书报告,《计算机读书报告》.doc
  3. 判断一个链表中是否有环
  4. 1、webpack学习
  5. webpack基础学习,各个loader和plugin的具体配置
  6. 论文阅读【异常检测】ModelCoder: A Fault Model based Automatic Root Cause Localization Framework for Microservi
  7. HDU 2155 小黑的镇魂曲
  8. Al+行业正在聚焦多元化的应用场景 为人工智能发展提供巨大空间
  9. js获取网页文档的各种高度和宽度
  10. 基于JSP的健身俱乐部会员管理系统的设计与实现(论文+PPT+源码)