优秀的编程知识分享平台

网站首页 > 技术文章 正文

成员方法的反射——(五)(成员方法是什么)

nanyue 2024-09-06 20:26:47 技术文章 5 ℃

宝宝们,我们今天继续分享关于反射的知识啦,昨天说到了成员变量的反射,我们今天说成员方法的反射。Method类。

Method类代表某个类中的一个成员方法,我们说这个方法是类中的方法,跟对象并无关系。

得到类中的某一个方法

Method charAt=Class.forName("java.lang.String").getMethod("charAt",int.class);我们说一个类中的同一个方法会有多种重载的方式,到底想选择哪一个方法呢,平时我们写程序是靠参数的列表,参数列表包括参数个数和参数类型,每一个参数的类型都可以用Class来表示,呢现在我们写一个参数进去,即int.class,就是说选择charAt(int)这个方法,我们现在想做的事情就是在某个字符串对象身上调用charAt(1)方法,呢我们通过反射该怎么做呢,我们说调用一个方法一定是在一个对象身上调用,那么看下面的代码,第一个参数就是那个对象,第二个参数是当我们正常调用方法的时候,是要给它传入一个参数进去的,那么我们这里的第二个参数也是一样,

通过反射的方式调用charAt()

好,这就是用反射的方式拿到这个字节码当中的某个方法,然后再作用于某个对象。注意的是,这个invoke是这个方法对象上的方法。

呢这里说一个特别的地方,假设我这里这样写,method.invoke(null,1);呢我们是不是看起来怪怪的呢,这个方法不通过一个对象,它自己就调用了,这意味着什么呢,,对,意味着这个方法就是静态方法,没错,因为静态方法调用的时候不需要对象,

再看下jdk1.4和jdk1.5的invoke方法的区别:

--jdk1.5:public Object invoke(Object object,Object... args)

--jdk1.4:public Object invoke(Object obj,Object[] args),也就是说按照1.4中的语法,需要将一个数组作为参数传递给invoke方法时,数组中的每个元素分别对应被调用方法中的一个参数 ,所以调用charAt方法的代码也可以用jdk1.4改为charAt.invoke("str",new Object[]{1})的形式。

好啦,今天的小知识就分享到这里啦,明天我们继续哦

最近发表
标签列表