网站大量收购独家精品文档,联系QQ:2885784924

《Java 自省类教程》.pdf

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Java 自省类教程》.pdf

第三章 Java 自省类教程 (翻译自SUN网站Java Reflection 教程) 翻译、改编 苏州职业大学 曾海 2003-9 例子代码请参见javareflection 例程包 3.1 概述 reflection 是一系列的API,它用于表示或者处理当前JVM中的类,接口和对象。 如果你准备写调试器 debugger 程序,或者类浏览器程序(Jbuilder 里有),或者GUI生成 器, reflectionAPI 就挺有用了。这个API的主要功能有: • 确定一个对象的类 • 取出类的modifiers,数据成员,方法,构造器和超类 • 找出某个接口里定义的常量和方法说明 • 创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象) • 取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做倒。 • 在运行时刻调用动态对象的方法 • 创建数组,数组大小和类型在运行时刻才确定。也能更改数组成员的值。 学习本章要注意,不要勉强去套用reflection 。在必要的时候才使用之。 本教程的教法是任务型的,提出一个任务,完成一个任务。每个任务一步一步进行教学。 主要内容是以下几课: 第一节:分析类 本节解释了如何确定对象的类,如果取得类和接口的有关信息。 第二节:操作对象 本节解释了如何实例化一个类,取或者设定成员变量的值,如何调 用方法。如果类名,成员变量和方法在运行时刻才能定下来,那么常规的方法会失效,通过 调用reflection API 才可以完成这些复杂的任务。 第三节 操作数组请大家自学,上课时间来不及了,并不非常复杂。 3.2 分析类 如果你在编一个类浏览器程序,你就需要取得类在运行时刻的有关信息。比如,你想显 示某个类的数据成员名,方法和构造器。再比如,你想显示某个类到底实现了哪些接口。这 些信息可以由自省此类的Class 对象来取得。 对于每个类而言,JRE都为其保留一个不变的Class 类型的对象。一个Class 对象包 含了特定某个类的有关信息。你可以通过调用Class 对象的有关方法,返回特定类的构造器 对象,方法对象和数据成员对象。通过这些返回的对象,你就可以得到构造器,方法和数据 成员的所有祥细原始定义。 Class 对象也包含接口信息。你可以调用Class 对象的某些方法来取得某接口的modifiers, 方法和公共常数。如果 Class 对象用来表示接口,那么 Class 对象的部份方法就不可用。比如 getConstructors,接口根本没构造器,所以这个方法就没用。 3.2.1 取得Class 对象 取得class 对象的方法有好几个,大家请看: 如果可以取得某个类的实例,你可以调用Ojbect.getClass 方法。如果你想知道某个对象 的类,可是又查不到,这个方法就有用了。请看例子:mystery 是某个类的对象。 Class c = mystery.getClass(); 类对象c 可以直接输出,请看 JButton jb=new JButton(); Class mc= jb.getClass() ; System.err.println(类内容+mc.toString() ); 如果你想取得某个类对象的超类,可以用 getSuperclass 方法。本例中,getSuperclass 方法返回TextComponent 的Class 对象,因为TextComponet 类是TextField 的超类。 TextField t = new TextField(); Class c = t.getClass(); Class s = c.getSuperclass(); 运行后直接输出c 和s 的结果是: 本类内容class javax.swing.JTextField 超类内容class javax.swing.text.JTextComponent 如果你知道类在编译时的名字(类名),取出它的class 对象就简单了:类名

文档评论(0)

wgvi + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档