java反射与代理

java反射与代理

ID:45326076

大小:1.18 MB

页数:48页

时间:2019-11-11

java反射与代理_第1页
java反射与代理_第2页
java反射与代理_第3页
java反射与代理_第4页
java反射与代理_第5页
资源描述:

《java反射与代理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、反射与代理第一章本章任务使用反射技术获取类的结构信息使用反射技术动态创建对象动态修改查询属性值动态执行方法动态创建数组并存取元素使用静态代理实现添加日志功能使用动态代理实现添加日志功能本章目标Java反射技术反射技术的引入反射技术的入口类Class反射技术的具体内容动态创建对象动态修改查询属性值动态执行方法动态创建数组并存取元素反射技术优缺点代理模式静态代理动态代理反射技术的引入4-1编译和运行时都知道类和对象的具体信息,此时直接对类和对象进行操作即可,无需反射publicclassWhyClass{publicvoidmet

2、hod1(Studentstu1){Studentstu2=newStudent();stu2.name="lkl";stu2.setAge(stu1.getAge());System.out.println(stu2.name);System.out.println(stu2.getAge());}}传入Student类,而不是其他类反射技术的引入4-2如果编译和运行时不知道类和对象的具体信息,此时应该如何做呢?publicclassWhyClass{publicvoidmethod2(Stringstr)throwsExc

3、eption{Classclazz=Class.forName(str);Objectobj=clazz.newInstance();Field[]fs=clazz.getFields();Method[]ms=clazz.getMethods();}publicstaticvoidmain(String[]args)throwsException{WhyClasst=newWhyClass();t.method2("java.lang.String");t.method2("cn.jbit.reflection.Studen

4、t");t.method2("java.util.Date");}}使用反射技术来实现实参:传入具体的类名形参:动态传入类名反射的应用场合在编译时根本无法知道该对象或类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息反射的作用通过反射可以使程序代码访问装载到JVM中的类的内部信息获取已装载类的属性信息获取已装载类的方法获取已装载类的构造方法信息反射技术的引入4-3在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中Class类:代表一个类Field类:代表类的成员变量

5、(属性)Method类:代表类的成员方法Constructor类:代表类的构造方法Array类:提供了动态创建数组,以及访问数组的元素的静态方法反射技术的引入4-4Class类是Java反射机制的起源和入口用于获取与类相关的各种信息提供了获取类信息的相关方法Class类继承自Object类Class类是所有类的共同的图纸每个类有自己的对象,好比图纸和实物的关系每个类也可看做是一个对象,有共同的图纸Class,存放类的结构信息,能够通过相应方法取出相应信息类的名字属性方法构造方法父类和接口反射技术的入口类Class5-1反射技术

6、的入口类Class5-2Class类的常用方法文件名说明getFields()获得类的public类型的属性。getDeclaredFields()获得类的所有属性getField(Stringname)获得类的指定属性getMethods()获得类的public类型的方法getMethod(Stringname,Class[]args)获得类的指定方法getConstrutors()获得类的public类型的构造方法getConstrutor(Class[]args)获得类的特定构造方法newInstance()通过类的无参

7、构造方法创建该类的一个对象getName()获得类的完整名字getPackage()获取此类所属的包getSuperclass()获得此类的父类对应的Class对象反射技术的入口类Class5-3publicclassTestClass{publicstaticvoidmain(String[]args)throwsException{Classclazz=Class.forName("java.lang.Object");//Classclazz=Class.forName("java.lang.String");Syste

8、m.out.println("------类的字段------------");Fieldfields[]=clazz.getDeclaredFields();for(Fieldfield:fields)System.out.println(field.getName()+"

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。