Java反射【三、方法的反射】
获取一个类下的所有方法
可以获取类类型后,获取到所有方法及相关信息
- 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反射【三、方法的反射】的更多相关文章
- [Java反射基础三]方法反射的基本操作
		
本文接上文“获取类的信息”,利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ public void print(){ Syst ...
 - java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)
		
Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应 ...
 - 通过Java反射调用方法
		
这是个测试用的例子,通过反射调用对象的方法. TestRef.java import java.lang.reflect.Method; import java.lang.reflect.In ...
 - JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践
		
JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...
 - Java第三阶段学习(九、类加载器、反射)
		
一.类加载器 1.类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 1.1 加载: 就是指将class文件读入内存,并为之自动 ...
 - java反射(三)--反射与操作类
		
一.反射与操作类 在反射机制的处理过程之中不仅仅只是一个实例化对象的处理操作,更多的情况下还有类的组成的操作,任何一个类的基本组成结构:父类(父接口),包,属性,方法(构造方法,普通方法)--获取类的 ...
 - 深入解析Java反射-invoke方法
		
博客原文:http://www.sczyh30.com/posts/Java/java-reflection-2/ 上篇文章中回顾了一下Java反射相关的基础内容.这一节我们来深入研究Method类中 ...
 - Effective Java 第三版——65. 接口优于反射
		
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
 - Java反射、动态加载(将java类名、方法、方法参数当做参数传递,执行方法)
		
需求:将java类名.方法.方法参数当做参数传递,执行方法.可以用java的动态加载实现 反射的过程如下: 第一步:通过反射找到类并创建实例(classname为要实例化的类名,由pack ...
 
随机推荐
- WPF学习笔记 - 如何用WPF创建单实例应用程序
			
使用一个已命名的(操作系统范围的)互斥量. bool mutexIsNew; using(System.Threading.Mutex m = new System.Threading.Mulex(t ...
 - VMware workstation安装Windows Server 2012 R2步骤详解(附下载链接)
			
话不多说,直接上链接.所需工具: 1.VMware workstation 14.0(版本无所谓) 附链接:https://pan.baidu.com/s/1CrH ...
 - kali破解wifi密码
			
开始 1.选择合适的网卡,有些网卡kali识别不了,我用的网卡信息 2.网卡开启监听模式 3.查看监听模式是否开启成功(网卡名称变成wlan0mon说明已经开启成功) 4.输入“airodump-ng ...
 - thinkPHP 出现route不起作用提示No input file specified.
			
修改.htaccess文件 原因在于使用的PHP是fast_cgi模式,而在某些情况下,不能正确识别path_info所造成的错误. 打开.htaccess 在RewriteRule 后面的index ...
 - 条件DCGAN(2019/09/10)
			
最近看到keras的官方GAN代码中有CGAN(全连接层)和卷积GAN(DCGAN),但他并没有给出“条件卷积GAN”,预测就把这两者结合了一下.虽然很多人用其他框架(e.g.TensorFlow)写 ...
 - 【JAVA开发】eclipse最新版本Eclipse Neon
			
这个版本的IDE支持Java.JavaScript.C/C++.PHP和Fortran等多种编程语言: 这个版本首次鼓励用户使用Eclipse Installer来做安装,这是一种由Eclipse O ...
 - PHP学习(4)——数组的使用
			
1.数组的概念 数组就是一个用来存储一系列变量值的命名区域. 每个数组元素有一个相关的索引(也成为关键字),它可以用来访问元素. PHP允许间隔性地使用数字或字符串作为数组的索引. 2.数字索引数组 ...
 - 现代化的拷贝文字---clipboard.js
			
参考链接:http://www.clipboardjs.cn/
 - cmake升级到3.10以上
			
使用yun install cmake3 安装 ,不会覆盖centos7 cmake 1 添加cmake3 源 echo '[group_kdesig-cmake3_EPEL]name=Copr re ...
 - Django 框架学习  ----  安装
			
这里引用了源码方式安装: 1.git clone https://github.com/django/django.git 2.cd django/ 3.python setup.py install ...