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