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. Android虚拟机安装apk

    将apk放入platform-tools 打开虚拟机之后 进入该目录执行命令

  2. [MA] 有关 Likelihood

    当提到 Linear Regression 或是 Logistic regression 等关键词时,都会涉及一个概念,叫做 Likelihood Function 以及 Maximum Likeli ...

  3. python笔记005-字符串-列表-元组

    目录 1 上次作业补充拓展... 1 1.1 进制转换... 1 1.2 类型判断... 1 2 今日学习内容... 2 2.1 格式化输出... 2 2.2 基本运算符... 2 2.2.1 算术运 ...

  4. c++学习---const 和 string

    当在两个文件定义了同名的const变量时,相对于定义了两个独立的变量 想要在一个文件中定义一个const变量并在其他文件中使用他:不管时声明还是定义,都加上extern关键字 因为const对象一经初 ...

  5. 解决springboot乱码和window cmd乱码

    @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean registration = ...

  6. 轻松搭建CAS 5.x系列(6)-在CAS Server上增加OAuth2.0协议

    概述说明 CAS Server默认搭建出来,客户端程序只能按照CAS自身的协议接入.CAS的强大在于,有官方的插件,可以支持其他的协议.本章节就让CAS Server怎么增加OAuth2.0的登录协议 ...

  7. 浅谈.NET中的类型和装箱、拆箱原理

    谈到装箱拆箱,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱.这当然没有问题,可是你只知道这么多,那么建议你花点时间看看楼主这篇文章 1. .NET中的类型 为了 ...

  8. Android 把枪/PDA 扫描头自回车没用 处理方法

    XML 控件加上属性 android:imeOptions="actionNone"

  9. php 环境搭建问题

    项目过程中需要用到 PHP环境 https://www.cnblogs.com/cyrfr/p/6483529.html APACHE无法启动:THE REQUEST OPERATION HAS FA ...

  10. JS基础_构造函数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...