方法对象代理代码详解!!!

本文分享了一段个人编程经历,强调了持续学习与实践的重要性。通过探讨代理类的使用,作者提醒程序员们保持对代码的热情。同时,文章以幽默的方式展示了程序员与青蛙之间的互动,生动地呈现了编程世界中的趣味与挑战。

PS:今天上午,非常郁闷,有很多简单础基的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

    package cn.itcast.day3;


import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;


public class ProxtTest {


/**
* @param args
*/
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
//回返代理类(此处代理类为Collection)的Class 对象
Class clazzProxy1=Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
System.out.println(clazzProxy1.getName());
//打印出构造函数
System.out.println("---------------begin constractor list------------");
Constructor[] constructors=clazzProxy1.getConstructors();
for(Constructor constructor:constructors){
String name=constructor.getName();
StringBuilder sBuilder=new StringBuilder(name);
sBuilder.append('(');
//获得构造函数参数类型
Class[] clazzparms=constructor.getParameterTypes();
for(Class clazzParm:clazzparms){
sBuilder.append(clazzParm.getName()).append(',');
}

if(clazzparms.length!=0 && clazzparms!=null)
//将最后一个','去掉
sBuilder.deleteCharAt(sBuilder.length()-1);

sBuilder.append(')');

System.out.println(sBuilder.toString());
}
//打印出一般函数
System.out.println("---------------begin methods list------------");
Method[] methods=clazzProxy1.getMethods();
for(Method method:methods){
String name=method.getName();
StringBuilder sBuilder=new StringBuilder(name);
sBuilder.append('(');
Class[] clazzparms=method.getParameterTypes();
for(Class clazzParm:clazzparms){
sBuilder.append(clazzParm.getName()).append(',');
}

if(clazzparms.length!=0 && clazzparms!=null)
//将最后一个','去掉
sBuilder.deleteCharAt(sBuilder.length()-1);

sBuilder.append(')');

System.out.println(sBuilder.toString());

}
System.out.println("---------------begin creat instance------------");
//获得构造函数
Constructor constructor=clazzProxy1.getConstructor(InvocationHandler.class);

class MyInvocationHandler1 implements InvocationHandler{


public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
return null;
}

}
//动态方法回返一个实例对象
Collection proxy1=(Collection)constructor.newInstance(new MyInvocationHandler1());
//用匿名内部类建创一个实例对象
Collection proxy2=(Collection)constructor.newInstance(new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
return null;
}
});
//直接用此方法建创一个对象
Collection proxy3=(Collection)Proxy.newProxyInstance(

Collection.class.getClassLoader(),

new Class[]{Collection.class},

new InvocationHandler(){
ArrayList target=new ArrayList();
//参数的义意:proxy:代理的对象,method:代理对象调用的方法,args:代理对象调用的方法中传入的参数
//比如:proxy3.add("zxx");则proxy为proxy3,method为add(),args组数中数据为zxx.
//invoke()方法回返的参数反给代理对象
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
long beginTime=System.currentTimeMillis();
Object retVal=method.invoke(target, args);
long endTime=System.currentTimeMillis();
System.out.println(method.getName()+" running time of "+(endTime-beginTime));
return retVal;
}
});
//每调用一次恣意方法都市找proxy3对象身上Handler的invoke()方法;
Object obj=proxy3.add("zxx");
System.out.println(obj);
proxy3.add("lhm");
proxy3.add("flx");
System.out.println(proxy3.size());
//getClass()为从Object继承的方法,从Object继承的方法中只有
//调用hashCode(),equals(),toString()这三种方法才转到invoke(),其余的不转
System.out.println(proxy3.getClass().getName());

}

    每日一道理
试试看——不是像企鹅那样静静的站在海边,翘首企盼机会的来临,而是如苍鹰一般不停的翻飞盘旋,执著的寻求。 试试看——不是面对峰回路转、杂草丛生的前途枉自嗟叹,而是披荆斩棘,举步探索。 试试看——不是拘泥于命运的禁锢,听凭命运的摆布,而是奋力敲击其神秘的门扉,使之洞开一个新的天地。微笑着,去唱生活的歌谣。

    }

    

    

    

    

    分享一下我的习学料资!!!!
Java全套顶级频视
http://pro.net.itcast.cn/View-22-1435.aspx
DotNet全套频视
http://pro.net.itcast.cn/View-23-1435.aspx
PHP全套频视
http://pro.net.itcast.cn/View-24-1435.aspx
全球最适合0础基习学程编的网上校园
http://pro.net.itcast.cn/View-25-1435.aspx
费免请求java全套频视光盘区域
http://pro.net.itcast.cn/View-26-1435.aspx

文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
“如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
“如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
“如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
  最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

转载于:https://www.cnblogs.com/jiangu66/archive/2013/04/28/3049931.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值