当前位置:七道奇文章资讯编程技术Java编程
日期:2011-04-13 09:19:00  来源:本站整理

<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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .