本帖最后由 段玉超 于 2012-3-7 09:19 编辑
对带有指定参数的指定对象调用由此 Method 对象表示的底层方法
这句话的意思也不难理解。Meithod 是表示 方法的元数据的对象,invoke 的意思是“”调用“”, 那么调用谁呢,当然是调用Method描述的对象也就是Method 对象多标识的方法。而方法是对应与类型(class)的,方法的调用(这里指实例方法)。是已对象实例为基础的。比如说
类Class1 中有一个实例方法 mothed ():void 我们调用这个方法的时候 要经过两步:
1、创建Class1的实例 o,2、o.mothed() 调用;
再看看 反射的过程
1、获得 class1的 Class 实例(类型元数据实例)。
2.然后可以获得 c描述 class1的 mothed():void 方法的一个元数据的实例 : Mothed实例。
3.如果我们想调用Moetd实例描述的方法,就可以使用 invoke方法。
再来看这句话 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法
然后对应 invoke 方法需要的参数 以及实例方法调用的过程来看就不难理解了
invoke 需要传入两个参数 ,第一个是一个Object实例 这句话 对应的就是 指定的对象 也就是 O.mothed()中的O了,如果mothed 方法需要参数,那么invoke 的第二个参数,就是o.mothed() 被调用时所需要的参数列表。 废话少说 一段代码最管用 我就只写伪代码了:- class MothedInvoke
- {
- public object commonOn(int arg1,string arg2){
- return "arg2"+arg1;
- {
- }
- public class Demo
- {
- public void main(String[] args){
- //正常调用
- MothedInvoke mivk = new MothedInvoke();
- System.out.print(mivk.commonOn(1,”加油加油”);
- // 使用反射调用 ,纯粹是示例
- Class classOfM = mivk .getClass();
- Mothed m = classOfM.getMothed("commonOn"); //这一步不知道对不对,有没有这个方法,反正就是一个意思获得 Mothed 的实例。
- //这一步开始调用方法了 这句话的意思就是 在指定对象(一个MothedInovoke 实例)上调用Mothed(也就是m)表示的底层方法 / /(也就是 commonOn 方法 )
- m.invoke(mivk,new Object[]{1,"加油加油"}); // Object数组中 传入的就是参数。
-
- }
- }
复制代码 |