获取一个类下的所有方法

可以获取类类型后,获取到所有方法及相关信息

  • Method[] ms = c.getMethods(); 获取方法列表(public)
  • Method[] ms = c.getDeclaredMethods(); 获取所有声明了的方法列表
  • Class c = m.getReturnType(); 获取返回值类型
  • String name = m.getName(); 获取方法名称
  • Class[] cs = m.getParameterTypes(); 获取某个方法参数列表
  • String name = c.getName(); 获取类名称(全称包含包名)
  • String sinpleName = c.getSimpleName(); 获取简称(只有类名)
  • Method m = c.getMethod("name",new Class[]{int.class,int.class,...}); 获取指定名称,参数列表的方法
  • Object o = m.invoke(obj,param1,param2...); 调用方法,第一个参数为该类对象,后面为参数列表

Demo:

public class ClassUtil {
/**
* 该方法输出一个对象所属类的所有方法
* @param 一个需要输出的对象,如1,“a”
*/
public static void printClassMethods(Object obj){
//获取入参的类类型
Class c = obj.getClass();
//根据类类型,获取该类型下所有方法
Method[] ms = c.getMethods();
for (Method method : ms) {
//获取返回值
System.out.print(method.getReturnType().getName()+" ");
//获取方法名称
System.out.print(method.getName()+"(");
//获取参数类型列表,如int,string
Class[] paramClass =method.getParameterTypes();
for (Class p : paramClass) {
//输出参数类型名称
System.out.print(p.getSimpleName()+",");
}
System.out.println(")");
}
}
}

Demo2-指定方法获取调用:

    Demo d = new Demo();
Class a = d.getClass();
// 获取指定的方法
Method m = null;
try {
m = a.getMethod("print", new Class[] { int.class, int.class });
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
// 方法的反射调用
Object o = null;
try {
//invoke(obj,param1,param2...)
o=m.invoke(d, 1, 2);
//返回o,若为void,返回null,否则为返回类型对象
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} class Demo {
public void print(String a, String b) {
System.out.println(a + b);
} public void print(int a, int b) {
System.out.println(a + b);
}
}

Java反射【三、方法的反射】的更多相关文章

  1. [Java反射基础三]方法反射的基本操作

    本文接上文“获取类的信息”,利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ public void print(){ Syst ...

  2. java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)

    Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应 ...

  3. 通过Java反射调用方法

    这是个测试用的例子,通过反射调用对象的方法.     TestRef.java import java.lang.reflect.Method; import java.lang.reflect.In ...

  4. JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践

    JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...

  5. Java第三阶段学习(九、类加载器、反射)

    一.类加载器 1.类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 1.1 加载: 就是指将class文件读入内存,并为之自动 ...

  6. java反射(三)--反射与操作类

    一.反射与操作类 在反射机制的处理过程之中不仅仅只是一个实例化对象的处理操作,更多的情况下还有类的组成的操作,任何一个类的基本组成结构:父类(父接口),包,属性,方法(构造方法,普通方法)--获取类的 ...

  7. 深入解析Java反射-invoke方法

    博客原文:http://www.sczyh30.com/posts/Java/java-reflection-2/ 上篇文章中回顾了一下Java反射相关的基础内容.这一节我们来深入研究Method类中 ...

  8. Effective Java 第三版——65. 接口优于反射

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  9. Java反射、动态加载(将java类名、方法、方法参数当做参数传递,执行方法)

    需求:将java类名.方法.方法参数当做参数传递,执行方法.可以用java的动态加载实现   反射的过程如下:     第一步:通过反射找到类并创建实例(classname为要实例化的类名,由pack ...

随机推荐

  1. o enclosing instance of type ArrayList_day02 is accessible. Must qualify the allocation with an enclosing instance of type ArrayList_day02

    错误日志: 这个错误是因为我创建的一个类,内中又创建了一个内部类,为什么呢在new内部类的时候出现错误呢,因为类中方法(函数)是在是在public static void main(String [] ...

  2. Http_urllib2

    打印http消息在控制台httpHandler=urllib2.HTTPHandler(debuglevel=1)httpsHandler = urllib2.HTTPSHandler(debugle ...

  3. Elasticsearch聚合问题

    在测试Elasticsearch聚合的时候报了一个错误.具体如下: GET /megacorp/employee/_search { "aggs": { "all_int ...

  4. Python3 Selenium自动化web测试 ==> 第九节 WebDriver高级应用 -- 操作select 和 alert

    学习目的: 掌握页面常规元素的定位方法 场景: 网页正常的select元素下拉框常规方法和select专属方法 正式步骤: step1:常规思路select页面元素定位 处理HTML代码截图 # -* ...

  5. Python爬虫:scrapy 的运行流程和各模块的作用

    scrapy的运行流程 爬虫 -> 起始URL封装Request -> 爬虫中间件 -> 引擎 -> 调度器(Scheduler): 缓存请求, 请求去重 调度器 -> ...

  6. android#嵌入式布局并创建自定义控件

    一.如何在android中嵌入布局文件: 新建一个布局title.xml,该文件为公共文件 <LinearLayout xmlns:android="http://schemas.an ...

  7. Linux下中文乱码

    Linux下中文乱码 修改mysql配置文件,centeros下 配置文件在 /etc/my.cnf vi /etc/my.cnf 在[mysqld]段下添加 character-set-server ...

  8. 15.sqoop数据从mysql里面导入到HDFS里面

    表数据 在mysql中有一个库userdb中三个表:emp, emp_add和emp_contact 表emp id name deg salary dept 1201 gopal manager 5 ...

  9. 【转帖】NAT类型及转换原理深入剖析

    NAT类型及转换原理深入剖析 http://www.m6000.cn/other/459.html  2018年8月4日16:40:14发表评论 297 views 大家都知道.NAT是位于内.外网之 ...

  10. [HNOI2008]越狱 题解

    题面: 我们知道:相邻房间的犯人的宗教相同的方案数=总方案数-相邻房间的犯人的宗教不相同的方案数: 那么所有方案数是m^n; 我们假设第一个房间有m中取值方案,而对于每个房间(非第一个)都有m-1个取 ...