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. ASP.NET请求过程-Module

    管道模型     上图中为Http请求在Asp.net程序中处理的过程.管道处理模型来自上面的HttpApplication,管道处理模型其实就是多个Module(其实这些module都是在往http ...

  2. 纯java代码搭建ssm

    参考: https://blog.csdn.net/Smile__1/article/details/103394460

  3. 剑指offer15:反转链表后,输出新链表的表头。

    1 题目描述 输入一个链表,反转链表后,输出新链表的表头. 2 思路和方法 (1)利用栈作为中间存储,进行链表的反转,将压入的数据按先进后出的顺序弹出依次赋给链表再输出表头pHead. (2)将当前节 ...

  4. LC 206. Reverse Linked List

    题目描述 Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5-> ...

  5. 正则与re模块

    一.正则表达式 在线测试工具 http://tool.chinaz.com/regex/ 1.字符组 ​ 在同一个位置可能出现的各种字符组成一个字符组,在正则表达中用[ ]表示 ​ 一个正则就是一条匹 ...

  6. Python--context(上下文)(其实是环境)

    最近读Flask的文档,读到很多关于Context(上下文)的术语,如应用上下文,请求上下文等,查阅资料但没有得到理解?有没有比较好的解释? 每一段程序都有很多外部变量.只有像Add这种简单的函数才是 ...

  7. WUSTOJ 1282: Start(Java)

    1282: Start 题目   判断一个字符串是不是回文串.例如:"abcba"是回文串.更多内容点击标题. 分析   水题,自己思考. 代码 /** * time 838ms ...

  8. Python中操作mysql的pymysql模块详解(转载)

    https://www.cnblogs.com/wt11/p/6141225.html

  9. (一)Centos之VMware虚拟机安装

    一.下载 64位的VM12 安装包: http://pan.baidu.com/s/1bpzoXQZ 二.安装 点击下一步: 老规矩,打勾,下一步: 这里我们新建一个文件夹 VM12 最好放在D盘或者 ...

  10. static的用法详解

    一.静态类 [1] 仅包含静态成员. [2] 静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化.也就是说,不能使用 new 关键字创建静态类类型的变量. [4] 不能包含实例构造函数. ...