黑马程序员技术交流社区
标题:
求解反射的问题
[打印本页]
作者:
mk7
时间:
2013-6-8 17:37
标题:
求解反射的问题
本帖最后由 mk7 于 2013-6-8 18:29 编辑
初学反射比较迷惑,希望大家指点
1,Person p = new Person();
2,Class clazz = Class.forName("com.itheima.Person");
3,Method method = clazz.getMethod("getAge", String.class);
4,method.invoke(p, "lisi");
复制代码
第3行代码获取了Person类中的getAge方法,所有Person实例对象的getAge方法不都是一样的吗
为什么第4行代码中调用invoke方法还要传入一个Person类的实例对象p??
作者:
007诸葛亮
时间:
2013-6-8 17:50
Java 反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类。
在运行时构造任意一个类的对象。
在运行时判断任意一个类所具有的成员变量和方法。
在运行时调用任意一个对象的方法。
Class类:代表一个类。
Field 类:代表类的成员变量(成员变量也称为类的属性)。
Method类:代表类的方法。
Constructor 类:代表类的构造方法。
Array类:提供了动态创建数组,以及访问数组的元素的静态方法。
作者:
slatop@qq.com
时间:
2013-6-8 18:04
因为你必须要指定一个对象,他才知道你要调用的是哪个对象的方法。虽然每个对象的方法都一样,但是方法操作的变量不一样。就如同你上面说的,getAge()如果不指定一个对象,那么你让他get谁的Age呢?
你换一个角度来思考这个问题。
静态成员反射如下
method.invoke(null,实参);
因为是静态成员函数所以该函数只能调用静态成员,所以不用指定对象了。
你将类与对象的关系理解的不够深刻,你要想象,对象是类的扩散体,一个类可以对应无数个对象,就好像类是一个中心,而向类四周扩散出的线都是他的对象。类拥有的东西,对象全部都有。
作者:
java.exe
时间:
2013-6-8 18:11
所有的Person类的实例对象的getAge()方法是一样的没错,但是具体是哪个对象在调用这个方法就不一定了,通过反射你拿到的方法是类中的方法而不是某个对象中的方法,所以必须传进p,来说明是哪个对象在调用这个共享的方法
作者:
刘凯
时间:
2013-6-8 18:18
method.invoke(p, "lisi");
你这个代码本身就有写的有些问题 你这个是获取getAge方法啊, get方法 还用传递“lisi”参数么? 应该是method.invoke(p); 吧
作者:
mk7
时间:
2013-6-8 18:28
是的 我看到视频中有两个参数 于是也传了个"lisi”
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2