A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 紫幻随影-缪 中级黑马   /  2014-5-20 14:50  /  1431 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 紫幻随影-缪 于 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不是指向同一个字节码文件吗?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
两个不同对象。
回复 使用道具 举报
obj和array是指向同一个字节码文件    但是他们是两个不同的对象..方法是被对象调用的一个对象一个内存块..你这个 m.invoke(obj, "hahah");相当于将这个方法作用在obj这个对象上--    obj是调用这个方法的底层对象   所以这里直接就是 m.invoke(array, "hahah");这才是array.add()  

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
arr.getClass()
obj.getClass()
这两个字节码文件是相同的
但是arr和obj是两个不同的对象啊

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 很给力!

查看全部评分

回复 使用道具 举报
Person p=new Person();
Person p1= new Person();
就像这一样,两个不对的对象,存储的值是不一样的,
Object obj=c.newInstance(); 也是一个对象,所以不是一样的

回复 使用道具 举报
  • ArrayList<Integer> array=new ArrayList<Integer>();
  •                 Class c=array.getClass();
  •                 Method m=c.getMethod("add",Object.class);
  •                 Object obj=c.newInstance();




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

回复 使用道具 举报
对象不同
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马