针对以前看过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是一样的,程序实际上不知道会执行哪一个。
分享到:
相关推荐
NULL 博文链接:https://sxk4429.iteye.com/blog/645624
主要介绍了java中Class.getMethods()和Class.getDeclaredMethods()方法的区别 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
Javassist的最外层的API和JAVA的反射包中的API颇为类似。它使你可以在装入ClassLoder之前,方便的查看类的结构。它主要由CtClass,,CtMethod,,以及...比如getName,getSuperclass,getMethods,,getSignature,等等
但同时,getDeclaredMethods()或者getMethods()返回的这些方法,Modifier.isVolatile(method.getModifiers())的结果却是true。 一些用户遇到过这样的问题。他们发现,使用immutator(这个项目探索了Java的一些不为人...
对于Java开发人员来说,实际工作中使用最多的就是各种框架技术,可以说,框架技术是求职者的必备技能。要想更好地学习并掌握框架技术,就需要了解实现框架的各种底层技术...另外,还可以调用 getFields() getMethods
一个Class对象, 代表一个类或接口; Class 对象由Java虚拟机在...Class对象.getMethods(); 获得所有的公共的方法(包括继承获得的公共构造方法); Class对象.getField(String name): 获得指定的公共的一个成员变量对象;
Method ms[] = clazz.getMethods(); for (int i = 0; i ; i++) { String methodName = ms[i].getName(); if (methodName.startsWith("set")) { String propertyName = methodName.substring(3)....
GetMethod(), GetMethods():返回MethodInfo类型,用于取得该类的方法的信息 GetProperty(), GetProperties():返回PropertyInfo类型,用于取得该类的属性的信息 可以调用这些成员,其方式是调用Type的...
Method[] methods = clazz.getMethods() 获取public修饰的构造方法数组,有父类中的方法 Method[] methods = clazz.getDeclaredMethods() 获取任意访问权限所有造方法数组,并且都是自己的方法 Method ...
作者:精致码农 ... 最近工作中遇到一个这样的需求:在某个列表查询功能中,可以选择某个数字列(如商品单价、当天销售额、当月销售额等),再选择 小于或等于 和 大于或等于 ,再填写一个待比较的数值,对数据进行查询...
在.Net 中, 一旦获得了Type对象,就可以使用GetMethods()方法获取此类型支持的方法列表;该方法的两种形式: MethodInfo [] GetMethods() MethodInfo [] GetMethods(BindingFlags bindingflas) :它的参数带有一些...
BindingFlags.Public | BindingFlags.NonPublic |BindingFlags.Instance | BindingFlags.CreateInstance, null, null, new object[] { })是肯定不行的,用GetMethods来看看,这个类型都有哪些方法。 代码如下:Type
Zend_Debug::dump($r->getMethods(), “Methods”); 您可能感兴趣的文章:PHP中类属性与类静态变量的访问方法示例PHP取得一个类的属性和方法的实现代码php类中private属性继承问题分析php中类和对象:静态属
(1)Method[] getMethods(); 获取类内所有public成员方法,包括继承而来的public方法。 (2)Method[] getDeclaredMethods(); 【暴力反射】 获取类内所有成员方法,包括private方法,但不包括继承而来的方法 (3)...
经典MEF实现 var bank = new DirectoryCatalog("Banks");... var methods = bank.GetType().GetMethods(); foreach (var item in methods) { Console.WriteLine(item.Name); } Console.ReadKey(); }
getMethods( " get " ) . getCallsTo() . print(); 结果显示在一个特殊的控制台中,该控制台具有指向代码中位置的超链接: 以上是查询ArrayList包含add方法的结果。 用户文档 Meta Pojos 主页位于 。 在那里你会...
leetcode中国 springbootPro 一、aop中执行顺序 @Pointcut定义切点 ...getMethods():获得类的public类型的方法。 getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类 getMethod(St