Thinking_in_Java_12(执行期型别识别).pptVIP

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java编程思想 第十二章:执行期型别识别 执行期型别辨识(RTTI) RTTI(run-time type identification) 使你得以从匿名的基类 reference 中发现型别信息 在运行期,对象的类型会得到鉴定 容易滥用 先多态 只在必要时刻才运用 RTTI RTII 比多态效率高 三种形式: Class.forName( ) Classname.class:字面常量 Instanceof( ) RTTI: 一个实例 为什么需要 RTTI 为什么需要 RTTI : 举例 Shapes.java: System.out.println(draw(this)): draw 需要一个字符串参数,可以通过调用this.toString 得到 转型在执行期进行检查 class 对象 Class 对象 (meta-class) 代表了执行期的类信息 JVM 中的类装载器会装载你程序中的类 一个 class 对象在该类任何对象创建之前总会被装载 每一个类只拥有一个 class 对象 Class 对象位于 .class 文件内 Class 对象只在需要时才被装载 “Class” 是所有class对象的型别 Class.forName: 将会装载特定名称的类 ClassNotFoundException: Constructs a ClassNotFoundException with the specified detail message. class 对象: 一个实例 Class.forName(String) 方法Class.forName(“Gum”) 是 Class 的一个static 成员。 Class对象和其他任何对象都是类似的,所以能够获取和控制它的一个reference(装载模块就是干这件事的)。 为获得Class的一个reference ,一个办法是使用forName()。它的作用是取得包含了目标类文本名字的一个String(注意拼写和大小写)。最后返回的是一个reference。 类字面常量(Class literals) 提供另一种指向Class对象的reference Classname.class: 得到一个与类名称相关的 class 对象的一个 reference 例如 Gum.class 与 Class.forName 相似 在编译时检查 更有效率(不调用函数),更安全 能用于Classes, interfaces, arrays, 和基础型别 类字面常量: TYPE TYPE: 用于外覆类 (wrapper) 转型期进行检查 传统的转型: 执行期型别检查;错误时掷出 ClassCastException Class 对象: 可被用来获得执行期型别信息(安全向下转型) instanceof: 决定一个对象是否属于某个类 C++: 对于 pointer 转型不进行执行期型别检查 instanceof 决定一个对象是否属于某个类 Class.newInstance: 实例化一个给定 class对象的一个新对象 相关联的array: (key, value) 对 使用instanceof : 举例 参阅 PetCount.java ( 参阅 p479 ) 加上 Pets.java (p479) 使用类字面常量: 举例 参阅 PetCount2.java ( 参阅 p481 ) 加上 Pets.java (p479) 动态的 instanceof Class.isInstance( ): 动态的调用 instanceof 等同性:instanceof vs. Class 它们并不相同,并无任何重大差异 instanceof: 基础和派生对象 Class equivalence: 完全为同一个类 返回一个对象在运行时的型别: public final native Class getClass() RTTI 语法 Class.forName(String className): 返回 className 对应的 Class 对象 Class.getInterfaces( ): 返回 Class 对象的一个数组,用于表示包含在 Class 对象内的 Interface Class.isInterface( ):返回包含在 Class 对象内的 Interface Class.getSuperClass( ): 查询该对象的直接基础类是什么,返回 reference Class.newInstance( ): 在没有现成对象情况下新建一个

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档