lecture13-Reflection.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
lecture13-Reflection,reflection,selfreflection,javareflection,reflection歌词,teachingreflection,noreflection,sakurareflection,selfreflection范文,whitereflection

第13章 Reflection 辛国栋 xinguodong@163.com 研究院529,5687921 动态语言 “程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。 尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection-反射。 什么是反射 反射的概念是在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射的应用 Spring框架:IOC(控制反转) Hibernate框架:关联映射等 白盒测试 通过对象反向取得类信息 在正常情况下,必须知道一个类的完整路径之后才可以实例化对象,但是在Java中也可以通过一个对象来找到其所在的类的信息。 Object类的支持 在Object类中定义了如下方法,此方法将被所有子类继承: public final Class? getClass() 以上方法返回值的类型是“Class”类,实际上此类是java反射的源头,所谓的反射从程序的运行结果看也很好理解:可以通过对象反射求出类的名称。 Class类 Classic本身表示一个类的本身,通过Classic可以完整的得到一个类中的完整结构,包括此类中的方法定义,属性定义等。 ClassT 类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象 Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象 Class是Reflection起源。要想操纵类中的属性和方法,都必须从获取Class object开始 Class类常用的方法 Java 反射相关的API java.lang包下 ClassT:表示一个正在运行的 Java 应用程序中的类和接口,是Reflection的起源 java.lang.reflect包下 Field 类:代表类的成员变量(也称类的属性) Method类:代表类的方法 Constructor 类:代表类的构造方法 Array类:提供了动态创建数组,以及访问数组的元素的静态方法 实例化Classic类对象 实例化Classic类对象的方法有三种: 第一种:通过forName()方法 第二种:类.class 第三种:对象.getClass() 实例化Classic类对象 package zyz.demo; class X{ }; public class GetClassDemo02{ public static void main(String args[]){ Class? c1 = null ; // 指定泛型 Class? c2 = null ; // 指定泛型 Class? c3 = null ; // 指定泛型 try{ // 以下的操作形式是在开发中最常用的一种形式 c1 = Class.forName(zyz.demo.X) ; }catch(ClassNotFoundException e){ e.printStackTrace() ; } c2 = new X().getClass() ; // 通过Object类中的方法实例化 c3 = X.class ; // 通过类.class实例化 System.out.println(类名称: + c1.getName()) ; // 得到类的名称 System.out.println(类名称: + c2.getName()) ; // 得到类的名称 System.out.println(类名称: + c3.getName()) ; // 得到类的名称 } } 实例化Classic类对象 一旦可以实例化Class类之后,就可以进行反射的进一步操作 了解Classic类的作用:反射的源头 三个Class类的实例化方式,其中要以“forName()”重点掌握。 Class类的使用 了解了Class类的实例化过程,如何使用Class类? 实际上Class类在开发中最常见的就是实例化对象的操作,即可以通过一个给定的字符串来实例化一个类的对象。 给定的字符串包含了完整的“包.类”的路径 通过无参构造实例化对象

文档评论(0)

gooddoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档