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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hurryup 高级黑马   /  2013-10-23 16:12  /  1351 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class ProxyTest {

  2. [code]
  3. <P>public class ProxyTest {

  4. /**
  5. * @param args
  6. */
  7. public static void main(String[] args) {
  8. // TODO Auto-generated method stub
  9. //创建一个动态类代理获得其字节码并实例化返回一个字节码类对象.jvm虚拟机要动态生成API必须要提供接口和类加载器两个参数信息
  10. Class clazzProxy1=Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);
  11. System.out.print(clazzProxy1.getName());
  12. /*$$$$proxy0()
  13. $$$$proxy0(invocationHandler,int i)*/
  14. System.out.println("----------begin constructors list----------");
  15. Constructor[] constructors=clazzProxy1.getConstructors();
  16. for(Constructor constructor : constructors)//返回Proxy对象的构造方法并循环
  17. {
  18. String name=constructor.getName();//获取该构造方法的名字
  19. StringBuilder sBuilder=new StringBuilder(name);
  20. sBuilder.append('(');
  21. Class[] clazzParams=constructor.getParameterTypes();
  22. for(Class clazzParam:clazzParams){ //如果是有参的构造方法则循环遍历其中的参数名子个数
  23. sBuilder.append(clazzParam.getName()).append(",");
  24. }
  25. if(clazzParams!=null && clazzParams.length!=0)
  26. sBuilder.deleteCharAt(sBuilder.length()-1);
  27. sBuilder.append(')');
  28. System.out.println(sBuilder.toString());//打印出proxy对象所映射的所有带参数的构造方法列表
  29. }

  30. //获取返回实现Proxy类的接口和父类的所有方法列表!
  31. System.out.println("----------begin methods list----------");
  32. Method[] methods=clazzProxy1.getMethods();
  33. for(Method method : methods)
  34. {
  35. String name=method.getName();
  36. StringBuilder sBuilder=new StringBuilder(name);
  37. sBuilder.append('(');
  38. Class[] clazzParams=method.getParameterTypes();
  39. for(Class clazzParam:clazzParams){
  40. sBuilder.append(clazzParam.getName()).append(",");
  41. }
  42. if(clazzParams!=null && clazzParams.length!=0)
  43. sBuilder.deleteCharAt(sBuilder.length()-1);
  44. sBuilder.append(')');
  45. System.out.println(sBuilder.toString());
  46. }
  47. }

  48. }</P>
  49. <P>输出结果:</P>
  50. <P>$$$$Proxy0----------begin constructors list----------
  51. $$$$Proxy0(java.lang.reflect.InvocationHandler)
  52. ----------begin methods list----------
  53. hashCode()
  54. add(java.lang.Object)
  55. clear()
  56. equals(java.lang.Object)
  57. toString()
  58. contains(java.lang.Object)
  59. addAll(java.util.Collection)
  60. iterator()
  61. size()
  62. toArray()
  63. toArray([Ljava.lang.Object;)
  64. remove(java.lang.Object)
  65. isEmpty()
  66. containsAll(java.util.Collection)
  67. removeAll(java.util.Collection)
  68. retainAll(java.util.Collection)
  69. isProxyClass(java.lang.Class)
  70. getProxyClass(java.lang.ClassLoader,[Ljava.lang.Class;)
  71. getInvocationHandler(java.lang.Object)
  72. newProxyInstance(java.lang.ClassLoader,[Ljava.lang.Class;,java.lang.reflect.InvocationHandler)
  73. getClass()
  74. wait()
  75. wait(long,int)
  76. wait(long)
  77. notify()
  78. notifyAll()
  79. </P>
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马