黑马程序员技术交流社区

标题: 动态代理类会自动调用的问题?? [打印本页]

作者: jingzhouheima    时间: 2013-8-13 17:29
标题: 动态代理类会自动调用的问题??
代码如图片所示:
动态代理类proxy3调用add方法时会自动调用InvacationHandler的invoke方法,
同样的在调用size()方法的时候,是不是也调用了InvacationHandler的invoke方法??


同样的,将ArrayList target  = new ArrayList ();放在InvacationHandler的invoke方法
里面的时候调用三次add()方法,proxy3.size()是0.而将ArrayList target  = new ArrayList ()放在
InvacationHandler接口的子类对象的成员位置上时,proxy3.size()是3。。???




001.png (66.62 KB, 下载次数: 6)

001.png

作者: 黑马伍哲沂    时间: 2013-8-13 20:19
第一:调用size()方法的时候,调用了InvacationHandler的invoke方法;
第二:ArrayList target  = new ArrayList ()在InvacationHandler的invoke方法里面的时候,proxy3每调用一个add方法的时候,invoke被调用.
调用后执行new ArrayList (),三次调用后,三次执行new ArrayList ().也就是说,有了三个不一样的target,每次都是新的.最后当你调用size()的时候,
invoke方法里面method.invoke(target,args);这里就是调用的target里面的size()方法.而这个target又是一个新的ArrayList(),里面没有数据.所以为0.
第三:建议提问时代码部分不要用截图.使用规范代码格式,方便别人为你调试.
作者: jingzhouheima    时间: 2013-8-13 20:24
黑马伍哲沂 发表于 2013-8-13 20:19
第一:调用size()方法的时候,调用了InvacationHandler的invoke方法;
第二:ArrayList target  = new ArrayLi ...

谢了,,大版。。




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