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. javascript策略模式的应用!

    最近在看<JavaScript设计模式与开发实践>这本书,受益匪浅,小记录一下书中的各个demo,加深理解: 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替 ...

  2. 【51nod】2622 围绕着我们的圆环

    [51nod] 2622 围绕着我们的圆环 kcz出的一道比赛题 第一次写带修改的线性基 ps:我觉得我计数计的好麻烦 首先是这个可以认为第二个矩阵是\(q\)个\(s\)位数,如果这\(q\)个数的 ...

  3. 数据库数据生成Excel表格(多用在导出数据)

    最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ...

  4. Java操作word转pdf

    如果转换后出现乱码,是doc格式的文档的话请转换为docx!!! 下载相关jar包和一个授权到2099年的凭证文件. 链接: https://pan.baidu.com/s/1xudkKqR1-TLL ...

  5. JVM -- 对象的概述和引用

    一.概述 说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做java语言的伴生产物,然后GC出现历史比java久远. GC需要完成的3件事情: 1.哪些内存需要回收 ...

  6. Python 安装包时选择 python版本

    安装了两个版本的python 其中一个版本为2.7 专门为python 2.7安装包使用的语句为 升级pip E:\Python27\python -m pip install --upgrade p ...

  7. C# xml序列化 datatime字段

    [XmlIgnore] public DateTime ApplicationDatetime { get; set; } [XmlElement("ApplicationDatetime& ...

  8. python 切换虚拟环境

    每次电脑重启后,都要切入虚拟环境,命令总是忘记.如果使用IDE,可以指定interpeter方便的切换. 首先conda info --env  查看当前有几个环境 激活/禁用环境 source ac ...

  9. 实现Bootstrap表格拖拽

    实现Bootstrap表格拖拽: 需要引入jquery.min.js.bootstrap相关文件,以及jquery.dragsort-0.5.2.js 代码如下: <html> <h ...

  10. bootstrap下拉框保持打开

    $(".dropdown-menu li").on("click", function (e) { e.stopPropagation(); }); 停止传播事 ...