黑马程序员技术交流社区

标题: 程序中代码的疑问 [打印本页]

作者: ㄗ灬Night|K    时间: 2013-10-12 23:26
标题: 程序中代码的疑问
本帖最后由 ㄗ灬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. }
复制代码

作者: Jam-l    时间: 2013-10-12 23:43
Object Value = method.invoke(target, args);
就是利用反射机制进行方法调用,target是方法调用的目标对象,args是调用时候的参数,Value 当然是调用方法的返回值。其实就可以看做是这样的
proxy2.add("xxx");  proxy2就是target对象,就是ArrayList集合调用了add方法,加入了xxx元素

long endTime = System.currentTimeMillis();
而这些代码其实就是动态代理类对消息进行后续的处理,加一些功能,就是运行这个方法所需要多少时间
作者: To    时间: 2013-10-13 13:53
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作




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