- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java_反射
Unit 11 反射 什么是反射? 反射(Reflection /Introspection ):指的是程序可以在运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。 Reflection和introspection是Java反射的同义语。 反射的功用 Java Reflection APIs是通过java.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等类实现的。 反射的功用 Java反射的功用: 在运行时确定一个对象所属的类(编译时未知); 在运行时得到一个类的 modifiers, fields, methods, constructors, and superclasses信息(编译时未知) ; 查找出哪些内容和方法声明是从某一接口实现而来; 创建一个其类名在编译时未知,直到运行时才得知的类的实例; get/set一个对象属性值,该属性名在编译时未知,直到运行时才获知; 调用一个直到运行时才获知方法名的对象的方法 创建一个数组其大小和元素的类型直到运行时才得知的数组,并可修改该数组元素的实现。 Java Reflection APIs—Class类 在Java Object类中有一方法:Class getClass(); 调用该方法可得到一个Class类的对象。 和所有的Java类一样,一个Class类亦是Object类的子类。 一个Class的实例用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)以及关键词void。 当一个类被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class object。 Java Reflection APIs—Class类 Java Reflection APIs—Class类 由于Class类的constructor是private的,故我们只能以下述方法创建一个Class对象。 Java Reflection APIs—Class类 当得到了一个Class类的对象后,我们从此对象中可获取如下信息: 一个类属于哪个包?Package getPackage(); 一个类import了哪些类?无直接对应的API,见下解决办法。 类(或methods, fields)的属性: int getModifiers() String Modifier.toString(int) bool Modifier.isInterface(int) 类名或接口名:String getName(); Java Reflection APIs—Class类 参数化类型的名称: TypeVariable Class[] getTypeParameters() 得到父类:Class getSuperClass() 类实现了哪些接口:Class [] getInterfaces() 类中定义了哪些内部类:Class [] getDeclaredClasses() 若所观察的类是内部类,则可探知其外部类: Class [] getDeclaredClasses() 类中有哪些constructor (public/private/access level): Constructor[] getDeclaredConstructors() 类中有哪些method (public/private/access level): Method [] getDeclaredMethods() 1. Examining Classes Retrieving Class Objects Getting the Class Name Discovering Class Modifiers Finding SuperClasses Identifying the Interfaces Implemented by a Class Examining Interfaces Identifying Class Fields Disco
原创力文档


文档评论(0)