因为毕业季,很多烦心的事,间断这么久都没有更新。本周学习进入类型信息、泛型、数组的学习。继续学习笔记。不再按照之前的编号,分章节贴出。
————————————————————————分割线———————————————————————————
RTTI(Run-Time
Type Identification)可以在运行时获得一个对象的信息(这样机制的产生原因,应该在于java的对象存储都是Oject的,是伪多态,类型识别需要额外的信息)。Java中,对于类型的确保:在编译时通过泛型系统来确保,在运行时通过类型转换来确保。对于具体的调用,则是通过多态的处理。对于List<Shape>这样的list,当向上转型之后,Circle、Square的类型信息会丢失,那么还是不是可以通过RTTI在运行时得到?
类与对象,类就是类,但是也是对象,为了让jvm使用,每个类都会拥有一个特殊的对象:Class对象,准确的说,是编译出一个与类同名的class文件。
Class.forName(String s)这个方法就是class这个对象类(所有class的对象都属于这个类)的static变量,方法的作用为按照传入的String寻找对应的class文件,加载(如果还没有),然后返回这个class对象引用(如类加载器),然后可以进行操作。
Class类型引用的获取除了使用forName方法,如果已经有了一个现成的对象,调用getClass()也可以得到class引用,从而得到运行时的类型信息,这个是一个Object的方法。获得引用后,可以使用getName,getSuperClass,newInstance(这个方法涉及到反射,不然在创建Object后没有类型转化)这样的方法。
对class的获取还有A.class这样的获取引用的方法,与forName之类的差别就是,这种引用的获取并不会触发类的加载(链接、static初始化等),直至使用才进行(惰性加载)。复习:对于static final这样的编译器常量的引用,并不会触发加载。
对于泛型,最为主要的一点作用就是编译时确保类型安全。通过使用泛型语法,可以让编译器强制执行额外的类型检查。对于Class<?>与Class,他们虽是等价的,但是前者却更优,因为它代表了你做了一个非具体的版本,而非什么都没有选。泛型不会对超类或者子类有任何的松懈。
RTTI确保类型转换,另外可以提供Class对像的运行时信息查询,最后还提供了instanceof的查询(通常在使用cast之前检查)。C++中并不使用RTTI,对于运行时的新的类型(多态),只是将其作为新的类型对待。
对于类型转换而言,直接使用(B)A这样转换与使用A.cast(B),后一种会执行更多的额外操作。
Instanceof 与 isinstance()完全等价,它指的是“你是这个类吗,或者你是这个类的子类?”直接的对class对象的比较就是确切的类型,无关继承。
在运行时,不知道一个对象的类型,可以通过RTTI获知,但是有一个前提,这个类型在编译时必须已知,这样才能通过RTTI识别。就是说,如果在运行时获得了一个编译时期没有获知的类型的对象,无法通过RTTI获知类型。如在运行时在网络上截取一段字节码,怎么知道它是那个类型?答案在在于反射。(IDE的实现,如语法提示,是通过什么呢?如eclipse,是不是通过class?反射?)
反射一般使用的不多,用于创建更为动态的代码。
分享到:
相关推荐
Thinking in Java 自学笔记——第二章 一切皆对象 个人原创,不喜勿喷。
Thinking in Java 自学笔记——第一章 对象导论 个人原创,不喜勿喷。
这是我经过半年的认真研读《thinking in java》这本书的读书笔记,涉及到从容器一章开始的所有后续章节的内容,只有把握我笔记中的内容我想你就差不多弄懂了<thinking in java>这本书的精华
本人在自学Thinking in Java这本书时所总结归纳的一些重点,希望能帮助大家更好地理解此书
这是我看Thinking in java 做的笔记,和大家分享下,如有不明白的的地方可与我私信,或者直接问度娘。
英文版Thinking in java Thinking in Java Fourth Edition Bruce Eckel President, MindView, Inc.
Thinking in java第三版中文版,第四版英文版以及对应的习题答案! 博文链接:https://easonfans.iteye.com/blog/456901
Thinking in Java 4th Edition Annotated Solutions Guide!
Thinking in Java 4Edition 练习题答案
Thinking In Java学习之50问 Thinking In Java学习之50问 Thinking In Java学习之50问
java ,thinking in java ,源码,thinking in java 第四版源码。。欢迎使用
Thinking in java 电子书,经典java书籍
王者归来之--Java编程思想读书笔记 Think in java4th
thinking in java thinking in java thinking in java thinking in java thinking in java
Thinking in Java 习题答案, 源代码
thinking in java读书笔记,内容不多,但觉得精彩,不好您可以在评论里骂我。
thinking in java 文档
以绝对敏锐的眼光解析thinking in java,彻底让你理解本章!
Thinking in java 中文版 学习Java必备教材
Thinking In Java 练习题答案 第四版 Thinking In Java 练习题答案 第四版 Thinking In Java 练习题答案 第四版