黑马程序员技术交流社区

标题: 反射 [打印本页]

作者: 紫幻随影-缪    时间: 2014-5-20 14:50
标题: 反射
本帖最后由 紫幻随影-缪 于 2014-5-21 21:44 编辑

有个题目:给一个ArrayList<Integer>的对象,向里添加一个字符串数据并显示。视频中是用了反射的方法实现的,如
  1. public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException,   InvocationTargetException, InstantiationException {
  2.                 ArrayList<Integer> array=new ArrayList<Integer>();
  3.                 Class c=array.getClass();       //创建字节码文件
  4.                 Method m=c.getMethod("add",Object.class);  // 通过反射获取成员方法
  5.                 Object obj=c.newInstance();
  6.                 m.invoke(obj, "hahah");  
  7.                 m.invoke(obj, "fge");
复制代码
结果为:
[hahah, fge]
[]

问题一:为什么array中没有值,array和obj不是指向同一个字节码文件吗?


作者: skill20    时间: 2014-5-20 14:59
两个不同对象。
作者: 观决    时间: 2014-5-20 15:14
obj和array是指向同一个字节码文件    但是他们是两个不同的对象..方法是被对象调用的一个对象一个内存块..你这个 m.invoke(obj, "hahah");相当于将这个方法作用在obj这个对象上--    obj是调用这个方法的底层对象   所以这里直接就是 m.invoke(array, "hahah");这才是array.add()  
作者: 艮昕辶    时间: 2014-5-21 18:05
arr.getClass()
obj.getClass()
这两个字节码文件是相同的
但是arr和obj是两个不同的对象啊
作者: 向前看向前走    时间: 2014-5-21 18:30
Person p=new Person();
Person p1= new Person();
就像这一样,两个不对的对象,存储的值是不一样的,
Object obj=c.newInstance(); 也是一个对象,所以不是一样的


作者: wuhyoung    时间: 2014-5-21 19:40




如上代码,你new了两个对象,一个是array,第二个是通过反射机制实例化了一个obj,这两个对象是不同的,他们两个指向的是同一个类,即同一个字节码,字节码是唯一的,就如类是唯一的,但是一个字节码可以实例化多个对象。


作者: gentleman    时间: 2014-5-21 19:50
对象不同




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