浅谈Java语言中的反射机制及应用

来源 :科学与财富 | 被引量 : 0次 | 上传用户:qq346278056
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:反射是Java语言中的一种重要的编程机制;总结了Java语言中反射的原理,以及反射相关类的获取方式,并总结了反射机制的几点应用。
  关键词:反射机制 Class Constructor Field Method
  1反射的概念
  Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时通过反射API取得任何一个已知名称的类的内部信息,包括其访问修饰符、父类、实现的接口,也包括属性和方法的所有信息,并可在运行时改变属性值或进行方法调用。Java反射机制容许程序在运行时加载、探知、使用编译期间完全未知的类。也就是说,Java可以加载一个运行时才得知名称的类,并且获得其完整结构信息,这种动态获取信息以及动态调用对象的成员的功能称为java语言的反射机制[1]。
  2反射的原理
  Java反射机制的实现要借助于4个类:Class,Constructor,Field,Method;其中Class代表的是类对象,Constructor是类的构造器对象,Field是类的属性对象,Method是类的方法对象,通过这四个对象我们可以粗略的看到一个类的各个组成部分。其中最核心的就是Class类,它是实现反射的基础。Class类的实例就是某个类的描述信息。Class类的实例表示正在运行的Java应用程序中的类和接口。
  Class没有公共构造方法。Class对象是在加载类时由Java虚拟机以及通过调用类加载器中的defineClass方法自动构造的。JVM在程序第一次主动使用某个类的时候,才会去加载该类。也就是说,JVM并不是在一开始就把一个程序所有的类都加载到内存中,而是到用的时候才把它加载进来,而且只加载一次。当JVM加载某个类时,会到本地磁盘去找到这个类的字节码文件,然后将这个字节码文件加载到JVM内存中,并且在内存堆区创建这个类的Class对象。注意这个不是new出来的对象,而是类的类型描述对象,每个类只有一个Class对象,作为类的数据结构的接口。JVM创建对象前,会先检查类是否加载,寻找类对应的Class对象,若类已加载好,则为待创建对象分配内存。有了类型信息描述对象Class对象,就可以获取类的属性,方法等信息。
  3 Class對象的获取
  有三种方式可以获取Class对象[2]。
  (1)通过类.class属性获得。任何数据类型都有一个“静态”的class属性。Java在编译一个类文件时,会为该类动态地添加一个公有的静态常量属性class,这个属性记录了该类的相关信息,即类型描述信息,它是Class类的实例。
  (2)通过对象.getClass()方法获得。任何对象都可以调用getClass()返回表示此对象运行时类的Class对象。当得到一个对象引用而不知道所属的类时,就可以用此方法得到该对象所属类的Class对象。
  (3)通过Class.formName()静态方法获得。Java的Class提供了静态方法formName(),此方法显示地加载指定类,并返回被加载类的Class对象。
  4 Constructor对象的获取
  Constructor类的对象用于描述类的单个构造方法。Class对象提供了四个方法可以获取Constructor对象。
  (1)getConstructor(Class parameterTypes…)获取指定参数类型的公有Constructor对象。
  (2)getConstructors()获取指定类的公有构造方法描述对象Constructor列表。
  (3)getDeclaredConstructor(Class parameterTypes…)获取指定参数类型的构造方法描述对象。
  (4)getDeclaredConstructors()获取指定类的所有构造方法描述对象列表。
  5 Method对象的获取
  Method类的对象用于描述类的单个方法(不包括构造方法)。可以通过Method类来获取方法的访问权限、参数类型、返回值类型等信息,并且可以通过获取的Method对象来动态执行方法。Class对象提供了四个方法可以获取Method对象。
  (1)getMethod(String name,Class parameterTypes…)获取指定名称和参数类型的公有方法描述对象。
  (2)getMethods()获取公有的方法描述对象列表。
  (3)getDeclaredMethod(String name, Class parameterTypes…)获取指定名称和参数类型的方法描述对象。
  (4)getDeclaredMethods()获取类本身定义的所有方法描述对象。
  6 Field对象的获取
  Field类的对象用于描述类的单个属性。可以通过Field对象来获取属性的访问权限、属性类型等信息,并且可以通过获取的Field对象来动态地修改属性值。Class对象也提供了四个方法可以获取Field对象。
  (1)getField(String name)获取指定名称的公有Field对象。
  (2)getFields()获取指定类的公有属性描述对象Field列表。
  (3)getDeclaredField(String name)获取指定名称的Field对象。
  (4)getDeclaredFields()获取指定类的所有属性描述对象Field列表。
  7反射的应用
  (1)运行时类型识别
  Class对象的isInstance()方法其原型是public boolean isInstance(Object obj),这个方法用来判定指定的对象是不是类的实例。例如从一个容器中取得了对象后,就可以判定这个对象的所属的类。
  (2)获取资源文件的URL
  Class对象的getResource()方法其原型是public URL getResource(String name),此方法可以返回与给定类相关的指定名称的资源URL。如果程序中用到图片、音频等资源,可以将这些资源放到相关类字节码文件相同目录,便于程序打包成jar文件。
  (3)动态获取类型信息
  在程序中可以通过反射显式加载指定类,通过反射实例化类,还可以通过反射执行方法,修改属性值和访问权限等操作。
  8小结
  Java中反射机制很实用,灵活使用反射能让我们代码更加灵活。但是反射也有缺点,反射包括了一些动态类型,所以 JVM 无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多。我们应该避免在经常被执行的代码或对性能要求很高的程序中使用反射[3]。
  参考文献:
  [1]Java基础之—反射[EB/OL].[2018-03-17].http://blog.csdn.net/sinat_38259539/article/details/71799078
  [2]徐传运 张杨.Java高级程序设计[M].北京:清华大学出版社,2014.
  [3]粗浅看 java反射机制[EB/OL].[2018-03-17.http://blog.csdn.net/wsl211511/article/details/51605655
其他文献
摘 要:本文从"医护人文之旅"微信公众号建设的目的和意义、主要内容、阅读分析等内容论述了此微信公众号的开发,旨在为护生提供一个针对于护理人文的自主交流平台。  关键词:微信公众平台,护理,人文关怀  当今,以网络为代表的新媒介在学生的学习生活中占据重要地位,充分利用网络媒介开展传统文化教育和人文知识传播活动已成为学者们的共同期望。相关研究结果表明,基于微信的移动学习这一隐形教育与正式教育相结合能够
期刊
摘 要:首先阐释上海莲花河畔景苑7号楼整体倾覆的状况,将建筑物与土体作为整体,应用圆弧滑动面条分法分析整体倾覆的原因,提出增加地下室的措施,应采用正确的施工程序等经验和教训。  关键词:圆弧滑动面条分法;建筑物倾覆;管桩基础;地下室  0引言  2009年6月27日5时30分,上海市闵行区莲花南路在建的“莲花河畔景苑”商品房小区工地内发生一幢13层楼房(7号楼)向南整体倾覆的事故,一名工人逃生不及
期刊
摘 要:ZigBee无线通信技术作为一种新型的近距离无线传感技术,其不仅在很多领域中发挥着重要的作用,同时也具有着非常良好的应用前景,本文对ZigBee无线通信技术的定义、特点与应用现状进行了简单介绍,并对其应用前景进行了探讨。  关键词:ZigBee无线通信技术;无线网络;应用前景  引言:网络技术与传感器技术的发展与推广使得ZigBee无线通信技术迎来了非常良好的发展契机,无论是现阶段的应用还
期刊
摘 要:水利工程作为我国基础设施建设的重要组成部分,在水资源合理开发,有效利用和水旱灾害防治方面发挥重要作用。随着我国经济的快速发展,对水利工程项目的需求在数量和质量方面不断提高。水利工程防渗施工技术的强弱关系到工程的安全运行及使用年限,因此,保证防渗墙施工达到相关标准要求,是充分发挥水利水电工程的积极作用的前提条件。本文简单介绍混凝土防渗墙施工技术概况, 分析造成水利工程的渗漏现象的原因,并进一
期刊
摘 要:电力电缆线路是电网体系中的重要组成部分,主要承担着电能传输、配送等重要职责。在电力工程建设过程中,电力电缆线路施工建设质量直接影响着电力系统运行的稳定与安全。对此,在电力电缆线路,尤其是大截面电力电缆线路施工中,做好电力电缆线路工程监理工作,保证施工质量与安全至关重要。基于此,在文献资料分析与实践工作经验总结的基础上,就电力电缆线路工程监理工作要点进行了分析,以供参考。  关键词:电力电缆
期刊
摘 要:随着经济的发展社会的进步,消费水平的不断提高,人们对于物质的追求越来越丰富和细致。这在一方面促进了我国经济的发展,同时也对我们国家的生产力提出了更高的要求,而要达成这样的变化,智能化产业智能化生产就变得越来越受到重视,给从事科技创新的人才带来更多的报酬和机遇。但是我国的智能化阶段相对西方发达国家还处于初期阶段,相对于德国全智能化的产业更是相差千里,因此借鉴西方国家的发展理念结合我国的实际情
期刊
摘 要:校园文化创意包袋的研究与设计,对宣传校园文化和地方特色有极大的重要性。百家文化,集齐百家灵感与百种创意,丰富了包袋设计的功能性和情感性,它结合了力学,人体工程学等学科,能够极大的体现了文化在包袋设计的重要性。  关键词:百家文化;创意设计;包袋  前言  不难看出,目前包袋市场的流行的包袋款式均是以欧美大牌为主,很少有属于中国特色的文化创意包袋,即使欧美的品牌融入了中国元素,也只是拿来主义
期刊
摘 要:预应力施工技术是建设部重点推广的技术之一,该技术的形式是多样的,能使房屋建筑结构在结构性能方面、使用功能、工程施工等多个方面都具有突出的优越性。文章将对房屋建筑工程中预应力施工技术及其质量控制等进行全面的分析。  关键词:建筑施工;预应力;技术  引言  随着人们的消费观念不断改变,对于住房和工作环境的要求越来越高,房屋住宅要求有较好的内景。采用预应力技术有许多结构和施工上的优点,即控制裂
期刊
摘 要:有色金属的冶炼过程中会造成大量能源的使用,在使用過程中会出现大量烟气,烟气中存在的余热能源可以达到能耗总构架的60%左右,这就意味着如果能够有效再利用烟气,回收能源,可以带给有色金属冶炼行业较高的成本降低价值与企业发展前景。本文以 值作为烟气中存在的余热价值变量的衡量标准,通过能级来区分烟气余热所存在的能源品质,通过烟气余热分析再回收达到降低能源损耗,减少成本消耗的目的。本文将从有色金属冶
期刊
摘 要:近期我国的生态建设发展迅速,林业建设的发展尤为显著。而林业的发展与人工造林更新工作有很大的关系。 我国的人工造林更新工作是一个长期的、复杂的工作,在人工造林的施工过程中,存在着不确定性和不稳定性,这也就意味着人工造林更新工作多多少少会存在一些问题,而这些问题会影响造林的进度以及造林的成果。所以,相关工作人员仍然要不断分析、研究,从而解决这些问题。  关键词:人工造林更新的特点;问题;建议 
期刊