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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ㄗ灬Night|K 中级黑马   /  2013-10-12 23:26  /  1096 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ㄗ灬Night|K 于 2013-10-14 08:48 编辑

在“52_黑马程序员_张孝祥_Java基础加强_完成InvocationHandler对象的内部功能”视频中
代码第27行看不懂了,跟下面的代码联系不起来..........{:soso_e101:}
谁能帮忙解释下这行代码的意义和作用啊?
  1. package cn.itcast.day2;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.InvocationHandler;
  4. import java.lang.reflect.Method;
  5. import java.lang.reflect.Proxy;
  6. import java.util.*;

  7. public class ProxyTest {

  8.         /**
  9.          * @param args
  10.          */
  11.         public static void main(String[] args)throws Exception {
  12.                 // TODO Auto-generated method stub

  13.                         
  14.                         Collection proxy2 = (Collection)Proxy.newProxyInstance(
  15.                                         Collection.class.getClassLoader(), new Class[]{Collection.class},
  16.                                         new InvocationHandler(){

  17.                                                 ArrayList target = new ArrayList();
  18.                                                 public Object invoke(Object proxy, Method method,
  19.                                                                 Object[] args) throws Throwable {
  20.                                                         
  21.                                                         long beginTime = System.currentTimeMillis();
  22.                                                         Object Value = method.invoke(target, args);
  23.                                                         long endTime = System.currentTimeMillis();
  24.                                                         System.out.println(method.getName()+"::run time"+(endTime-beginTime));
  25.                                                         return Value;
  26.                                                 }});
  27.                         
  28.                         proxy2.add("xxx");
  29.                         proxy2.add("yyy");
  30.                         proxy2.add("zzz");
  31.                         System.out.println(proxy2.size());
  32.         }

  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

倒序浏览
Object Value = method.invoke(target, args);
就是利用反射机制进行方法调用,target是方法调用的目标对象,args是调用时候的参数,Value 当然是调用方法的返回值。其实就可以看做是这样的
proxy2.add("xxx");  proxy2就是target对象,就是ArrayList集合调用了add方法,加入了xxx元素

long endTime = System.currentTimeMillis();
而这些代码其实就是动态代理类对消息进行后续的处理,加一些功能,就是运行这个方法所需要多少时间

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-13 13:53:31
藤椅
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马