自己学习java reflect体会
关键字: java reflect以前一直没有机会学习Java reflect,可能有机会也错过了吧。这一次利用晚上的时间好好的看看了一下。发现还不错,现在把体会写下来。我用的是JDK1.5的版本上做的实例。
核心的,经常用的工具为:
java.lang.reflect.Field --代表类的属性,
java.lang.reflect.Method--代表类的方法,
java.lang.reflect.Constructor--代表类的构造方法,
java.lang.Class--代表一个类,
最基本的是Class类。
1.我们在做任何操作的时候都是从Class开始的:
Class<?> cl = Class.forName("cn.com.Simpale");
2.在上面的Class对象以后,我就可以开工干活了
Method[] method = cl.getDeclaredMethods();//获取这个类中的所有方法
Method method = cl.getMethod("message",new Class[] { String.class });//指定这个类中的message方法
Field[] filed = cl.getDeclaredFields();//获取这个类中的所有字段
Field filed = cl.getDeclaredField("a");//获取指定的特定的方法
3.如果我们要调用这个方法,那么就用到:
Object ob = new Object[]{"1"};
method.invoke(cn.newInstance(), ob);//这个是带参数的方法调用,如果没有参数就ob为空了。
4.获取实例:
我们在获取实例分为两种情况:一种就是没有参数的获取,这样的简单直接写为:cl.newInstance();
另一种为有参数的获取,这样就多几行代码,写为:
Constructor<?> cn = cl.getConstructor(new Class[] { String.class,String.class });//获取构造函数的方式
Object[] ob1 = new Object[] { " China", " bejing" };//构造函数的参数设置
cn.newInstance(ob1);//获取实例
5.其实调用有参数的方法和有参数的实例是差不多的,只不过是多一个构造函数的构造。
6.Class这个类好特殊啊,它也是继承了Object这个类,Java允许多种方法生成class object.
a.cl.getSuperclass();//获取父类的class object
b.class.forName("");//获取指定类的class object
c.String.class;//获取原生类型的class object
d.Boolean.TYPE;//获取primitive wrapper object
7.动态代理的原理:要有目标接口,代理类,执行类
8.在jdk中必须实现java.lang.reflect.InvocationHandler接口中的
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable;
9.然后在执行类中:
java.lang.reflect.InvocationHandler hi = new Holdup(si);
Simpale ob = (Simpale)Proxy.newProxyInstance(si.getClass().getClassLoader(), si.getClass ().getInterfaces(), hi);
这样基本完成了动态代理。从上面的学习过程我有很深的体会就是class-param-invoke,这样一贯通我的工作中就不会
遇到来之这方面的阻力了。代理也是一样,没什么的,只不过能更好的理解开源框架了。
发表评论
- 浏览: 800 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
自己学习Struts2学习的心 ...
深秋小雨 写道http://www.javaeye.com/post/47503 ...
-- by yujianqiu -
自己学习Struts2学习的心 ...
yuxianghong 写道 LZ有不有这方面比较好的资料。如果有的,能否给看 ...
-- by andyjames -
自己学习Struts2学习的心 ...
wujiekangyun 写道 myoldman 写道 yuxian ...
-- by qamer -
自己学习Struts2学习的心 ...
现在一直使用springMVC看看其实原理都差不多 等有时间了把MVC迁移到s ...
-- by laiseeme -
自己学习Struts2学习的心 ...
myoldman 写道 yuxianghong 写道 LZ有不有这方面比 ...
-- by wujiekangyun






评论排行榜