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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦大忠 中级黑马   /  2013-10-20 01:26  /  1424 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 秦大忠 于 2013-10-21 11:52 编辑

解释代码中标记为?????????????????????????
的地方,为什么要睡眠十毫秒?
package qin.com;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
public class Demo2 {
public static void main(String[] args) {
  final ArrayList target = new ArrayList();
  //开始创建一个ArrayList类的代理实例,将ArrayLIst强制转换成父类List
  List proxy = (List) Proxy.newProxyInstance(
    // 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序
    List.class.getClassLoader(),
    //获取List的类加载器
    ArrayList.class.getInterfaces(),
    //获取需要指定的接口
    new InvocationHandler() {
     // InvotioncationHandler是一个调用处理器,当调用ArrayList中某个方法时,计算该方法的运行时间
     //重写InvocationHandler中唯一的方法invoke()
     public Object invoke(
       Object proxy,
       //在其上调用方法的代理实例
       Method method,
       //对应于在代理实例上调用的接口方法的 Method 实例,调用哪个方法,method对象就代表哪个方法
       Object[] arr
       //包含传入代理实例上方法调用的参数值的对象数组,将方法中调用的参数存入一个数组arr
     ) throws Throwable {
      long beginTime = System.currentTimeMillis();
      Thread.sleep(10);//???????????????????????????????????????????????????????????????????????
      Object reVal = method.invoke(target, arr);
      //该invoke方法时Method中的方法,而不是InvocationHandler中方法,带有arr参数的方法中,如果该
      //方法完成,则将该方法的返回值返回给调用者,相当于运行一次target中某一个方法
      long endTime = System.currentTimeMillis();
      System.out.println(method.getName()+"()的运行时间是"
         + (endTime - beginTime));
      return reVal;
      //该返回值是调用代理实例中某个方法时该方法返回的值
     }
    });
  proxy.add("bucuo");
  proxy.remove("nihaoa");
  System.out.println(proxy.toString());
}
}
图片看不清楚,可以粘贴到MyEclipse里面按Ctrl+Shift+F格式就会规范了

QQ图片20131020012329.jpg (74.86 KB, 下载次数: 37)

QQ图片20131020012329.jpg

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
看不清,把代码粘出来
回复 使用道具 举报
潘才新 发表于 2013-10-20 01:32
看不清,把代码粘出来

潘哥你怎么还没睡?
回复 使用道具 举报
如果不加睡眠10ms,你的程序的运行结果显示的运行时间有可能是0,所以为了可以明显看到运行时间,加上睡眠10ms,这是我个人理解

评分

参与人数 1技术分 +2 收起 理由
黄文伯 + 2 很给力!多给一分!

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
给你自己看的,你可以改一下程序,改成0,再改成1000,看看分别有什么变化就知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马