6、获取Class中的方法

6.1 getMethods() 获取的都是共有的方法(包括父类)

  • 返回包含一个数组 方法对象反射由此表示的类或接口的所有公共方法 类对象,包括那些由类或接口和那些从超类和超接口继承的声明。
  • 如果此类对象表示具有多个具有相同名称和参数类型但具有不同返回类型的公共方法的类型,则返回的数组对于每个此类方法都有一个方法对象。
  • 如果此类对象表示与类初始化方法的类型 ,则返回的阵列不具有相应的方法对象。
  • 如果此类对象表示一个数组类型,则返回的阵列具有方法对于每个由阵列类型从继承的公共方法对象Object 。 它不包含方法对象clone() 。
  • 如果此类对象表示一个接口,那么返回的数组不包含任何隐含声明的方法,从Object 。因此,如果在此接口或其任何超级接口中没有显式声明方法,则返回的数组的长度为0.(注意,表示类的类对象始终具有从Object公共方法)。
  • 如果此类对象表示原始类型或空值,则返回的数组的长度为0。
  • 由此类对象表示的类或接口的超级接口中声明的静态方法不被视为类或接口的成员。
  • 返回的数组中的元素不会被排序,并且不是以任何特定的顺序。
/**
* 获取指定Class中的公共函数
*/
@Test
public void getMethodDemo() throws Exception {
Class clazz = Class.forName("com.hw.bean.Person");
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println(method);
}
}

运行:

6.2 getDeclaredMethods() 获取本类中的所有的方法(包含私有的)

  • 返回包含一个数组方法对象反射的类或接口的所有声明的方法,通过此表示类对象,包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。
  • 如果此类对象表示具有多个具有相同名称和参数类型但具有不同返回类型的声明方法的类型,则返回的数组对于每个此类方法都有一个方法对象。
  • 如果此类对象表示具有类初始化方法的类型 ,则返回的阵列不具有相应的方法对象。
  • 如果此类对象表示没有声明方法的类或接口,则返回的数组的长度为0。
  • 如果这个类对象表示一个数组类型,一个基本类型,或者是void,则返回的数组的长度为0。
  • 返回的数组中的元素不会被排序,并且不是以任何特定的顺序。
@Test
public void getMethodDemo_2() throws Exception {
Class clazz = Class.forName("com.hw.bean.Person");
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method);
}
}

运行:

6.3 getMethod(String name, 类<?>... parameterTypes) 获取单个方法

  • 返回一个方法对象,它反映此表示的类或接口的指定公共成员方法类对象。
  • name参数是一个String它指定了所需方法的简单名称。
  • parameterTypes参数是以声明顺序标识方法的形式参数类型的类对象的数组。
  • 如果parameterTypes是null ,它被视为一个空数组。
6.3.1 方法无参 方式一:使用无参构造器(默认) method.invoke(o, null)
@Test
public void getMethodDemo_3() throws Exception {
Class clazz = Class.forName("com.hw.bean.Person");
// 获取空参的一般方法
Method method = clazz.getMethod("show", null);
Object o = clazz.newInstance();
method.invoke(o, null);
System.out.println(method);
}

运行:

6.3.2 方法无参 方式二:使用有参构造器 method.invoke(o, null)
@Test
public void getMethodDemo_4() throws Exception {
Class clazz = Class.forName("com.hw.bean.Person");
// 获取空参的一般方法
Method method = clazz.getMethod("show", null);
// 获取带参构造器
Constructor constructor = clazz.getConstructor(String.class, int.class);
Object o = constructor.newInstance("小明", 12);
method.invoke(o, null);
System.out.println(method);
}

运行:

6.3.3 方法有参
@Test
public void getMethodDemo_5() throws Exception {
Class clazz = Class.forName("com.hw.bean.Person");
Method method = clazz.getMethod("paramMethod", String.class, int.class);
// 获取带参构造器
Constructor constructor = clazz.getConstructor(String.class, int.class);
Object o = constructor.newInstance("小明", 12);
method.invoke(o, "张三", 18);
System.out.println(method);
}

运行:


本章节源码: ReflectDemo4

6、获取Class中的方法的更多相关文章

  1. C#获取类中所有方法

    var t = typeof(HomeController); //获取所有方法 System.Reflection.MethodInfo[] methods = t.GetMethods(); // ...

  2. C#通过反射获取类中的方法和参数个数,反射调用方法带参数

    using System; using System.Reflection; namespace ConsoleApp2 { class Program { static void Main(stri ...

  3. 获取DLL中的方法名称

      OpenFileDialog obj = new OpenFileDialog(); if (obj.ShowDialog() == System.Windows.Forms.DialogResu ...

  4. django rest framework serializer中获取request中user方法

    views.py   serializer = self.get_serializer(data=request.data, context={'request': request}) seriali ...

  5. ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值

    用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器.最近才发现IActionFilter的OnActionExecuting方法,甚 ...

  6. 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码

    详解C#泛型(二)   一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...

  7. js获取输入框中当前光标位置并在此位置插入字符串的方法(angularjs+ts)

    一半是参照别人代码,一半是自己代码,略笨拙,如果有更好的方法希望分享. 获取当前光标位置的方法 getCaretPosition (obj:any) { //获取输入框中当前光标的位置,obj为此输入 ...

  8. APPCAN开发笔记:html页面之间的参数传递:使用js获取url中的参数,以及在APPCAN中不能使用的解决方法

    用PHP的GET/POST方式来传递方式已经是司空见惯了,但是如果我的页面是一个静态的html的页面,想传递参数的时候要怎么办呢?在APPCAN的开发中我们会经常遇到这样的问题,因为所有的页面都是静态 ...

  9. JSF页面中使用js函数回调后台bean方法并获取返回值的方法

    由于primefaces在国内使用的并不是太多,因此,国内对jsf做系统.详细的介绍的资料很少,即使有一些资料,也仅仅是对国外资料的简单翻译或者是仅仅讲表面现象(皮毛而已),它们的语句甚至还是错误的, ...

随机推荐

  1. 将 MathType 公式转换为 Word 自带公式

    以下操作是基于Office 365以及MathType 6.9b平台.有网友留言说第四步没出现「转换为 Office Math」选项,这个我就不清楚了,难道是只有Office 365才支持? 打开Ma ...

  2. MongoDB 聚合函数及排序

    聚合函数 最大值  $max db.mycol.aggregate([{$group : {_id : "$by_user", num_max : {$max: "$li ...

  3. 从业务流程角度:分析TMS系统各个功能模块

    TMS的主要功能是协调承运商.运营商.货主三种角色人员分工合作共同完成运输任务,并实现对运输任务的跟踪管理.本文将按照业务流程顺序对TMS系统各个功能模块进行分析说明. 一.业务描述 新零售的兴起及& ...

  4. Form key length limit 2048 exceeded ,提交数据时,数据的键过长 或者是上传文件过大

    在ASP.NET Core MVC中,文件的key 默认最大为2048,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如 ...

  5. [NOIP2018模拟赛10.23]发呆报告

    闲扯 考场看了眼题目感觉很难,一个小时敲完了所有暴力...嗯然后就在那里发呆什么事也没做 T3考场上把数据结构想了个遍都不会完成1操作,现在看这种思路其实之前也接触过... 比较玄学的一件事情就是T1 ...

  6. spring源码(1)---idea基础环境搭建

    一.环境准备 1. jdk1.8.1 做java开发的这个应该能自己找到 2.gradle-4.9 https://services.gradle.org/distributions/ 没用过grad ...

  7. 南宁AI项目

    1.能了解并对项目整体进度情况有清晰的认识,什么时间点需要完成什么工作项. 2.认识了解项目干系人,能和客户独立沟通交流,理解现场业务,不要一问三不知,什么情况都不了. 3.能推动项目进展和问题及时处 ...

  8. springboot启动流程(一)构造SpringApplication实例对象

    所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 启动入口 本文是springboot启动流程的第一篇,涉及的内容是SpringApplicat ...

  9. javascript新特性

    让我们看看javascript中的一些新特性.本文将介绍它们的语法和相关链接,以帮助读者及时了解它们的进展.我们将通过编写一个小测试项目来演示如何快速使用这些新功能! 关于提案 提案分为五个阶段.有关 ...

  10. [Vuex系列] - Module的用法(终篇)

    于使用单一状态树,应用的所有状态会集中到一个比较大的对象.当应用变得非常复杂时,store 对象就有可能变得相当臃肿.为了解决以上问题,Vuex 允许我们将 store 分割成模块(module).每 ...