<b>详解reflect Java的反射机制</b>[Java编程]
本文“<b>详解reflect Java的反射机制</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1、范例辨认的两种方法:
首先理解一下“运行时范例辨认”(Run-time Type Identification, RTTI)主要有两种方法,
第一种:是我们在一次编译时和运行时已经知道了全部的范例.
第二种:是我们在整项目分模块的编译,在运行时可以对新加入的模块举行动态的编译.(在动态编译模块之前还不知道被编译code的范例.) 这就是下面要承受的,功效强盛的“反射”机制.
2、熟习“Class对象”:
要理解RTTI(运行时范例辨认)在Java中的工作原理,首先必须知道范例信息在运行时是若何表示的,这项工作是由“Class对象”完成的,它包含了与类有关的信息.
类是程序的重要构成部份(类的属性,办法以及它的一些特点,在这里我就不做赘述了.),每个类都有一个Class对象,每当编写并编译了一个新类就会产生一个Class对象,它被保存在一个与你所成立的新类同名的.class文件中.那么在程序运行时,当我们想生成这个类的对象时(实例化这个类),运行这个程序的Java虚拟机(JVM)就会这样做:
首先会从加载所创新类的.class文件,
然后确认这个新类的Class对象能否已经加载,假如还没有加载,JVM就会按照类名查找.class文件,并将其载入,一旦这个类的Class对象被载入内存,它就被用来成立这个类的全部对象.
普通的RTTI情势包含三种:
1.传统的范例转换.如“(Apple)Fruit”,由RTTI确保范例转换的精确性,假如履行了一个错误的范例转换,就会抛出一个ClassCastException非常.
2.通过Class对象来获得对象的范例.如
[code="java"] Class c = Class.forName(“Apple”);
Object o = c.newInstance();
3.通过关键字instanceof或Class.isInstance()办法来肯定对象能否属于某个特定范例的实例,精确的说,应当是instanceof / Class.isInstance()可以用来肯定对象能否属于某个特定类及其全部基类的实例,这和equals() / ==不一样,它们用来对比两个对象能否属于同一个类的实例,没有考虑担当关系.[enxtpage]
3、反射
假如不知道某个对象的范例,可以通过RTTI来获得,但前提是这个范例在编译时必须已知,这样才能利用RTTI来辨认.即在编译时,编译器必须知道全部通过RTTI来处理的类.
利用反射机制可以不受这个限制,它主要利用于两种情形:
第一种情形,是“基于构件的编程”这种编程方法中,将利用某种基于快速利用开辟(RAD)的利用构建工具来构建项目.这是目前最常见的可视化编程办法,通过代表差别组件的图标拖动到图板上,然后设置”构件“(组件)的属性值来配置它们来成立程序.要做到这种配置编程,就必必要求构件都是可实例化的,并且要表露其部份信息,使得程序员可以读取和设置构件的值和状况.当处理GUI时间的构件时还必须表露相关办法的事件处理细节,以便RAD环境帮忙程序员覆盖这些处理事件的办法.在这里,就要用到反射的机制来查抄可用的办法并返回办法实体对象.Java通过JavaBeans供应了基于构件的编程架构.
第二种情形,在运行时获得类的信息的别的一个动机,就是但愿可以供应在跨网络的远程平台上成立和运行对象的本领.这被成为远程调用(RMI),它答应一个Java程序将对象分步在多台机械上,这种分步本领将帮忙开辟人员履行一些需求举行大量计算的任务,充分操纵计算机资源,提高运行速度.
Class类支持反射,是在java.lang.reflect中包含了Field/Method/Constructor类,每个类都实现了Member接口.这些范例的对象都是由JVM在运行时成立的,用来表示未知类里对应的成员.如可以用Constructor类成立新的对象,用get()和set()办法读取和改正与Field对象关联的字段,用invoke()办法调用与Method对象关联的办法.同时,还可以调用getFields()、getMethods()、getConstructors()等办法来返回表示字段、办法以及构造器的对象数组.这样,未知的对象的类信息在运行时就可以被完好肯定下来,而在编译时不需求知道任何信息.
别的,RTTI有时能办理效率问题.当程序中利用多态给程序的运行带来负担的时刻,可以利用RTTI编写一段代码来提高效率.
以上是“<b>详解reflect Java的反射机制</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |