黑马程序员技术交流社区
标题:
反射
[打印本页]
作者:
紫幻随影-缪
时间:
2014-5-20 14:50
标题:
反射
本帖最后由 紫幻随影-缪 于 2014-5-21 21:44 编辑
有个题目:给一个ArrayList<Integer>的对象,向里添加一个字符串数据并显示。视频中是用了反射的方法实现的,如
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
ArrayList<Integer> array=new ArrayList<Integer>();
Class c=array.getClass(); //创建字节码文件
Method m=c.getMethod("add",Object.class); // 通过反射获取成员方法
Object obj=c.newInstance();
m.invoke(obj, "hahah");
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
ArrayList<Integer> array=new ArrayList<Integer>();
Class c=array.getClass();
Method m=c.getMethod("add",Object.class);
Object obj=c.newInstance();
如上代码,你new了两个对象,一个是array,第二个是通过反射机制实例化了一个obj,这两个对象是不同的,他们两个指向的是同一个类,即同一个字节码,字节码是唯一的,就如类是唯一的,但是一个字节码可以实例化多个对象。
作者:
gentleman
时间:
2014-5-21 19:50
对象不同
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2