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

© 男人你得有范 中级黑马   /  2014-8-24 19:34  /  937 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.itheima;

  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Proxy;
  5. import java.util.ArrayList;
  6. import java.util.List;

  7. /**
  8. * 第4题:写一个ArrayList类的代理,实现和ArrayList中完全相同的功能,并可以计算每个方法运行的时间。
  9. *
  10. * @author hp-pc
  11. * */
  12. public class Test4
  13. {
  14.         @SuppressWarnings("unchecked")
  15.         public static void main(String[] args)
  16.         {
  17.                 @SuppressWarnings("rawtypes")
  18.                 // new一个final类型的list集合
  19.                 final ArrayList target = new ArrayList();
  20.                 @SuppressWarnings("rawtypes")
  21.                 /*
  22.                  * 创建一个动态代理类实例 第一个参数:定义代理类的类加载器; 第二个参数:代理类要实现的接口列表; 第三个参数:指派方法调用的调用处理程序
  23.                  */
  24.                 List proxy = (List) Proxy.newProxyInstance(List.class.getClassLoader(),
  25.                                 ArrayList.class.getInterfaces(), new InvocationHandler()
  26.                                 {
  27.                                         @Override
  28.                                         // 在代理实例上处理方法调用并返回结果
  29.                                         public Object invoke(Object proxy, Method method,
  30.                                                         Object[] args) throws Throwable
  31.                                         {
  32.                                                 //开始时间
  33.                                                 long beginTime = System.currentTimeMillis();
  34.                                                 //让进程暂停执行10毫秒,为了更明显的显示运行时间
  35.                                                 Thread.sleep(10);
  36.                                                 Object reVal = method.invoke(target, args);
  37.                                                 //结束时间
  38.                                                 long endTime = System.currentTimeMillis();
  39.                                                 System.out.println(method.getName()
  40.                                                                 + " running time is " + (endTime - beginTime)
  41.                                                                 + "毫秒");
  42.                                                 return reVal;
  43.                                         }
  44.                                 });
  45.                 /*
  46.                  * 运行结果
  47.                  * add running time is 10毫秒
  48.                  * add running time is 11毫秒
  49.                  * add running time is 10毫秒
  50.                  * add running time is 10毫秒
  51.                  * remove running time is 11毫秒
  52.                  */
  53.                 //通过方法向对象中增加字符串对象
  54.                 proxy.add("gaozhihao");
  55.                 proxy.add("gaozhihao");
  56.                 proxy.add("gaozhihao");
  57.                 proxy.add("heima");
  58.                 proxy.remove("heima");

  59.         }
  60. }
复制代码

1 个回复

倒序浏览
不要直发代码,加点文字简介
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马