黑马程序员技术交流社区

标题: 关于invoke的使用 [打印本页]

作者: 杨银川    时间: 2011-12-27 14:30
标题: 关于invoke的使用
本帖最后由 杨银川 于 2011-12-30 13:09 编辑

在反射技术中会用到invoke,感觉很难理解它的用法,谁可以解释一下啊
作者: 王昌盛    时间: 2011-12-27 15:17
jdk中对invoke的定义
public Object invoke(Object obj, Object... args)
              throws IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException

先得到某一方法 如:Method  methodCharAt = String.getClass.getMethod("charAt","int.class");
然后   方法.invoke(对象,参数列表);
如method.invoke(str1,1);
作者: 杨旭    时间: 2011-12-27 15:21
Object invoke(Object obj, Object... args)
          对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
作者: 房宝彬    时间: 2011-12-27 16:07
invoke这个方法就是调用委托,MSDN上的解译是:
Control.Invoke 方法
在拥有此控件的基础窗口句柄的线程上执行委托。

------------------------------------------------------------
用invoke调用用的委托方法,是被Controller控制的,如果Controller出现了错误,invoke就会报错,然后停止调用的委托,
就和一个进程和线的关系差不多。
作者: 付星    时间: 2011-12-27 18:07
在方法区里有生成的Class文件
每个类型对象可以通过getClass()获得这一个份,而这个Class类中保存是类的结构定义,如:它的访问修饰是什么、它的成员字段、它的成员方法等,这个字段和方法又由一个个类封装起来,它们像一面镜子,照射出你定的类结构
下面有个例子
public class Test {
        public synchronized static void main(String[] args) throws Exception {
                Person p=new Person();
                Class<?> clazz=p.getClass();
                Method m=clazz.getMethod("say");//先得到一个指定的方法对象
                m.invoke(p);//调用方法时是执行哪个对象的方法
        }
}
class Person
{
        private String name;
        private int age;
        public void say() {
                System.out.println("Em");
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2