因为毕业季,很多烦心的事,间断这么久都没有更新。本周学习进入类型信息、泛型、数组的学习。继续学习笔记。不再按照之前的编号,分章节贴出。
————————————————————————分割线———————————————————————————
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 自学笔记——第一章 对象导论 本章节总结了面向对象程序设计(Object-oriented Programming, OOP)的基本概念和原则,以帮助读者更好地理解 Java 编程语言。以下是对标题、描述、标签和部分内容的...
### Thinking in Java 自学笔记——第二章 一切皆对象 #### 重要概念解析 ##### 2.1 用引用操纵对象 在Java中,一切都被视为对象,这意味着无论是字符串、数字还是其他数据类型都可以被视为对象来进行操作。当...
《Thinking in Java》是一本深度解析Java编程语言的经典著作,其深入浅出的讲解和丰富的实例使得读者能够全面理解Java的精髓。以下是对书中部分关键知识点的总结: 1. **Java 泛型**:泛型是Java SE 5.0引入的重要...
### Thinking in Java 读书笔记知识点总结 #### 一、万事万物皆对象 1. **对象存储位置** - **寄存器**:程序无法直接控制。 - **栈(Stack)**:存储基本类型数据和对象引用,但对象本身不在此处。 - **堆(Heap)...
《王者归来之Thinking in Java读书笔记》是对Bruce Eckel的经典之作《Thinking in Java》第四版的深度学习与总结。这本书是Java程序员的必备参考书,它深入浅出地阐述了Java语言的核心概念和技术,旨在帮助读者理解...
除了泛型的基本用法之外,《Thinking in Java》还探讨了更高级的主题,如反射机制,这是一种能够获取类的信息并动态创建对象的技术,在某些场景下非常有用。 ### 四、案例分析与实践 #### 1. 实战案例 书中包含多...
根据提供的文件信息,以下是对文件《Thinking in Java 4th Edition Annotated Solutions Guide》中所包含知识点的详细解释: 首先,文件标题《Thinking in Java 4th Edition Annotated Solutions Guide》指出了这是...
### Thinking In Java 学习笔记知识点总结 #### 面向对象编程(OOP)的重要性及其影响 面向对象编程(OOP)在软件开发领域产生了深远的影响。它不仅提高了开发效率和降低了维护成本,还简化了设计流程,使得编程任务...
类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java...
Thinking in java第三版中文版,第四版英文版以及对应的习题答案! 博文链接:https://easonfans.iteye.com/blog/456901
《Thinking in Java》是Bruce Eckel的经典之作,第四版(TIJ4)更是Java程序员必读的书籍之一。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、集合框架、多线程、网络编程等众多主题。源码是...
《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地介绍了Java语言的核心概念和技术。这本书的练习题是学习Java的重要组成部分,因为它们能够帮助读者巩固理论知识并提升实践能力。以下是对"Thinking in ...
《Thinking in Java》是Bruce Eckel的经典之作,第四版涵盖了Java编程语言的广泛主题,适合初学者和有经验的程序员。这本书深入浅出地讲解了Java的核心概念和技术,旨在帮助读者建立坚实的编程基础,并理解面向对象...
《Thinking in Java》是Bruce Eckel的经典之作,被誉为学习Java编程的权威指南。该书以其深入浅出的方式,详尽地介绍了Java语言的核心概念和技术。第三版是此书的一个重要里程碑,它涵盖了Java语言的诸多关键特性,...
《Thinking in Java》是一本备受推崇的Java编程教材,由Bruce Eckel撰写,被誉为Java学习者的必读之作。这本书深入浅出地介绍了Java语言的核心概念和技术,覆盖了从基础到高级的主题,对于有一定Java基础的读者来说...
"Thinking in Java——自己手写的代码"这个压缩包很可能是作者在阅读这本书的过程中,为了加深理解和实践,自己编写的代码实现。 在压缩包"Think in Java 4 code"中,我们可以预期找到与《Thinking in Java》第四版...
《Thinking in Java》是Bruce Eckel的经典编程教材,它深入浅出地介绍了Java语言的核心概念和技术。...《Thinking in Java-answer》提供的答案集将帮助读者检查自己的理解,找到错误并修正,从而更有效地学习Java编程。
《Thinking in Java》是 Bruce Eckel 编著的一本经典的Java编程教材,它深受程序员喜爱,被誉为学习Java的必备参考书。这本书全面深入地探讨了Java语言的核心概念和技术,不仅适合初学者,也对有经验的程序员提供了...
《Thinking in Java》是Bruce Eckel的经典之作,第四版更是被广大Java开发者视为学习和进阶的重要参考书籍。这本书深入浅出地介绍了Java语言的核心概念和技术,包括面向对象编程、集合框架、多线程、网络编程、GUI...