`

getMethods

阅读更多
针对以前看过override和overload的区别,正面理解起来很容易,最近看了reflect之后也可以用另外一种思路理解,也许这样理解更彻底些。
首先是引用博客里的:
    getDeclaredMethod*()获取的是类自身声明的所有方法,包含public、protected和 private方法。getMethod*()获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。要获得父类的不是public的方法只有递归到父类再getDeclaredMethod*(),要是invoke父类的私有或者普通(不是public)的方法需要设置method.setAccessible(true)。


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class cl {
	public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		cl c=new cl();
		try {
		
		//c.getClass().getMethod("prt", a.class).invoke(c, new a());
//		Method[] mm=	c.getClass().getMethods();//这里得到11个
//		length   :11
//		name prt
//		name main
//		name wait
//		name wait
//		name wait
//		name hashCode
//		name getClass
//		name equals
//		name toString
//		name notify
//		name notifyAll

		Method[] mm=	c.getClass().getDeclaredMethods();//这里得到自身类里的方法,共3个
//		length   :3
//		name prt
//		name main
//		name p

		System.out.println("length   :"+mm.length);
		for(Method m1:mm){
		String sss=	m1.getName();
		System.out.println("name "+sss.toString());
		}
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
	public void prt(a s){
		s.p();
	}
	private void p(){
		
	}
}




下面关于invock():

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class cl {
	public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		cl c=new cl();
		try {
		
		try {
			c.getClass().getMethod("prt", a.class).invoke(c, new a());
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
	public void prt(a s){//这里a是一个类
		s.p();
	}
	private void p(){
		
	}
}

第一个参数是方法名prt,
c.getClass().getMethod("prt", a.class).invoke(c, new a());
并且prt必须是c中的共有方法
  第二个参数是传入该方法中的参数class[]集合,  c是指调用该方法的实例,new a()是指该方法的具体参数值


这里需要说明的是要传入的是8种基本类型class[]也要是他们的封装类型集合,   另外就是如果不是public方法,调用会有异常。


说明  :overload的参数为什么要类型不一样,就是这里class[]能看出来的 ,如果类型一样的也可以覆盖,那么这里class是一样的,程序实际上不知道会执行哪一个。
分享到:
评论

相关推荐

    class.getMethods()

    NULL 博文链接:https://sxk4429.iteye.com/blog/645624

    java中Class.getMethods()和Class.getDeclaredMethods()方法的区别

    主要介绍了java中Class.getMethods()和Class.getDeclaredMethods()方法的区别 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    javassist3.19GA.jar

    Javassist的最外层的API和JAVA的反射包中的API颇为类似。它使你可以在装入ClassLoder之前,方便的查看类的结构。它主要由CtClass,,CtMethod,,以及...比如getName,getSuperclass,getMethods,,getSignature,等等

    一些Java中不为人知的特殊方法.docx

    但同时,getDeclaredMethods()或者getMethods()返回的这些方法,Modifier.isVolatile(method.getModifiers())的结果却是true。 一些用户遇到过这样的问题。他们发现,使用immutator(这个项目探索了Java的一些不为人...

    java框架知识点汇总(反射,XML,设计模式,Redis缓存数据库)

    对于Java开发人员来说,实际工作中使用最多的就是各种框架技术,可以说,框架技术是求职者的必备技能。要想更好地学习并掌握框架技术,就需要了解实现框架的各种底层技术...另外,还可以调用 getFields() getMethods

    个人java总结笔记

    一个Class对象, 代表一个类或接口; Class 对象由Java虚拟机在...Class对象.getMethods(); 获得所有的公共的方法(包括继承获得的公共构造方法); Class对象.getField(String name): 获得指定的公共的一个成员变量对象;

    根据数据库表自动产生javabean

    Method ms[] = clazz.getMethods(); for (int i = 0; i ; i++) { String methodName = ms[i].getName(); if (methodName.startsWith("set")) { String propertyName = methodName.substring(3)....

    01:详解C#中的反射.pdf

    GetMethod(), GetMethods():返回MethodInfo类型,用于取得该类的方法的信息 GetProperty(), GetProperties():返回PropertyInfo类型,用于取得该类的属性的信息 可以调用这些成员,其方式是调用Type的...

    day021-反射和注解笔记和代码.rar

    Method[] methods = clazz.getMethods() 获取public修饰的构造方法数组,有父类中的方法 Method[] methods = clazz.getDeclaredMethods() 获取任意访问权限所有造方法数组,并且都是自己的方法 Method ...

    c# 动态构建LINQ查询表达式

    作者:精致码农 ... 最近工作中遇到一个这样的需求:在某个列表查询功能中,可以选择某个数字列(如商品单价、当天销售额、当月销售额等),再选择 小于或等于 和 大于或等于 ,再填写一个待比较的数值,对数据进行查询...

    c#反射调用方法示例

    在.Net 中, 一旦获得了Type对象,就可以使用GetMethods()方法获取此类型支持的方法列表;该方法的两种形式: MethodInfo [] GetMethods() MethodInfo [] GetMethods(BindingFlags bindingflas) :它的参数带有一些...

    深入反射生成数组的详解

    BindingFlags.Public | BindingFlags.NonPublic |BindingFlags.Instance | BindingFlags.CreateInstance, null, null, new object[] { })是肯定不行的,用GetMethods来看看,这个类型都有哪些方法。 代码如下:Type

    PHP获取类中常量,属性,及方法列表的方法

    Zend_Debug::dump($r->getMethods(), “Methods”); 您可能感兴趣的文章:PHP中类属性与类静态变量的访问方法示例PHP取得一个类的属性和方法的实现代码php类中private属性继承问题分析php中类和对象:静态属

    Java中的反射(二)

    (1)Method[] getMethods(); 获取类内所有public成员方法,包括继承而来的public方法。 (2)Method[] getDeclaredMethods(); 【暴力反射】 获取类内所有成员方法,包括private方法,但不包括继承而来的方法 (3)...

    MEF小实例 经典MEF机制 简单获取全部方法

    经典MEF实现 var bank = new DirectoryCatalog("Banks");... var methods = bank.GetType().GetMethods(); foreach (var item in methods) { Console.WriteLine(item.Name); } Console.ReadKey(); }

    meta-pojos:用于浏览 Java 代码的 Java API

    getMethods( " get " ) . getCallsTo() . print(); 结果显示在一个特殊的控制台中,该控制台具有指向代码中位置的超链接: 以上是查询ArrayList包含add方法的结果。 用户文档 Meta Pojos 主页位于 。 在那里你会...

    leetcode中国-springbootPro:第一个弹簧靴

    leetcode中国 springbootPro 一、aop中执行顺序 @Pointcut定义切点 ...getMethods():获得类的public类型的方法。 getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类 getMethod(St

Global site tag (gtag.js) - Google Analytics