上篇说到了通过反射能够获取属性,使用 Field 对象,本篇简单说一下,通过反射如何获取方法以及调用方法:

想要获取方法,首先创建一个 Method 对象,有 getMethods 和 getMethod,同属性,getMethods 和 getDeclaredMethods 一个是拿到所有方法,一个是拿到本类(声明的)

输出结果对比:
getMethods:通过拿到了从父类 Object 里面继承的方法

getDeclaredMethods:只能获取到当前类定义的方法

获取到方法集合以后,说一下获取单个方法:

getMethod() 经过重载,如果不需要传递参数,例如 getter 方法,那么直接传递方法的 String 字符串即可

如果需要传递参数,比如 setter 方法,那么在后面需要传递参数的类,需要注意的是: 这里没有包装类的自动转换,必须对应,Integer.class 不能写成 int.class,反之亦然

已经拿到指定方法,现在开始执行方法:

使用 invoke 函数,执行方法,需要传递两个对象,第一个是需要执行方法的对象(这里是 student,第二个是需要传递的参数(如果没参数,直接传 null 即可)

此时会出现一些问题:如果是私有方法(private 修饰的)那么就会报错,如图:


因为此时是 getMethod,拿不到 私有的方法,需要使用 getDeclaredMethod 拿到已经声明的方法。
但是发现还是会报错


这是因为没有设置权限访问,需要使用如下语句:

setAccessible,将参数修改为 true


此时方法执行成功,总结:公共方法直接使用 getMethod 获取 invoke 执行,如果是 私有的方法 需要用 getDeclaredMethod 再设置 setAccessible 修改为 true 即可实行,此时完成反射的方法部分

通过反射获取方法以及执行相关推荐

  1. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )

    文章目录 一.不同 Android 系统创建 dex 数组源码对比 二.不同 Android 系统创建 dex 数组源码对比 三. Android 5.1 及以下系统反射方法并创建 Element[] ...

  2. java 获取参数的类型_java反射获取方法名称,参数类型

    package com.mysec.reflex; import java.lang.reflect.Constructor; import java.lang.reflect.Field; impo ...

  3. java反射获取方法内部_公共技术点之 Java 反射 Reflection

    本文为 Android 开源项目源码解析 公共技术点中的 Java 反射 部分 分析者:Mr.Simple,校对者:Trinea,校对状态:未完成 1. 了解 Java 中的反射 1.1 什么是 Ja ...

  4. java 反射 获取方法列表_Java 反射获取类详细信息的常用方法汇总

    为了加深印象,特把方法都从新敲了一遍,等不会的时候返回了看看就好了. 类ReflectionDemo package Reflection; @Deprecated public class Refl ...

  5. JAVA通过反射获取方法真实参数名

    默认情况下,我们是无法获取到方法中参数的名称,通过反射机制也只能获取到类似于arg0,arg1这样表示参数顺序的"参数名" 这样当我们需要使用方法的实际参数时,比方说spring自 ...

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

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

  7. java反射 获取方法参数名_java 反射借助 asm 获取参数名称最优雅简单的方式

    背景说明 最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式. jdk7 及其以前,是无法通过反射获取参数名称的. jdk8 可以获取,但是要求指定 -parameter 启动参数,限 ...

  8. java 反射获取方法属性和方法调用

    第一步当然是了解反射是什么东西: 指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法.这种动态获取信息,以及动态调用对象方法的功能叫java语 ...

  9. Java 反射 ---- 获取方法信息

    这一章我们通过Java的反射获取某个类的全部信息,话不多说直接上代码. 先贴工具类获取类信息的方法: package com.wangjd;import java.lang.reflect.Metho ...

最新文章

  1. 腾讯联合国家天文台启动探星计划,优图AI可提升120倍数据处理效率
  2. 结对编程-马尔科夫链作业成绩
  3. 利用HAProxy实现零停机更新维护
  4. python 线程类 threading.Thread.run() 方法
  5. 一道关于宏的面试题及解答
  6. RabbitMQ负载均衡(1)
  7. Spring boot验证码前后端验证
  8. IOS开发基础之模拟科技头条项目案例32
  9. ASP.NET(c#)实现重定向的三种方法的总结
  10. anacoda2如何连接使用mysql_Anaconda 安装 Python 库(MySQLdb)的方法-(转)
  11. 编辑器,webstorm,phpstorm系列配置方法汇总-笔记
  12. spring-boot-devtools 热部署
  13. 视图自己定义旋转动画 相似百度音乐
  14. android服务之service(其二)关于aidl进程间通信,Android初级教程进程间的通信AIDL
  15. 【海量地图图源合集】教你如何一键获取150+高清卫星影像、电子地图、地质图、DEM等地图图源
  16. Python3,2行代码,多种方法,直接把网页内容转换成PDF文档和图片。
  17. 实验吧-PHP大法-eregi()函数
  18. appstore app 下载地址
  19. (4M+2)阶魔方阵算法
  20. 管理电脑,让工作高效进行

热门文章

  1. 逻辑回归损失函数求导推导过程
  2. 使用注解实现声明式事务
  3. 红米Note9Pro和iQOOZ1哪个好 红米Note9Pro和iQOOZ1哪个更值得入手
  4. Web2.5已至,Web3.0还会远吗?
  5. mybatis mybatis-plus resultMap 实现多表联查
  6. mysql varchar存储字符数
  7. Python程序模拟手工推算考虑兔子寿命的斐波那契数列
  8. 从个人喜好的角度 来聊聊Note7和iPhone7 Plus
  9. C++笔记 友元函数 友元类
  10. 这次引起程序员恐慌的竟然是网易云音乐